跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 在 Java 中以下 json 字符串怎么用 gson 反序列化,谢谢。
未分類
20 7 月 2020

在 Java 中以下 json 字符串怎么用 gson 反序列化,谢谢。

在 Java 中以下 json 字符串怎么用 gson 反序列化,谢谢。

資深大佬 : starry97 5

本人刚学 java,选择想对这个 json 字符串反序列化,网了找了好多 demo 都失败,特来请教下大家这个该怎么反序列化,谢谢。

{     "GroupName1":{         "name1":{             "name":"li",             "age":22         },         "name2":{             "name":"zhang",             "age":23         }     },     "GroupName2":{         "name1":{             "name":"li",             "age":22         },         "name2":{             "name":"zhang",             "age":23         },         "name3":{             "name":"wang",             "age":22         }     }, } 

大佬有話說 (17)

  • 資深大佬 : GM

    定义一个结构相同的 pojo 不就可以了么?

  • 資深大佬 : Jacky23333

    直接看 github 上面找 gson 文档就好啦,写的很详细

  • 主 資深大佬 : starry97

    @GM 我看文档里定义结果相同的 pojo 是需要属性和 json 字段一致才行,但这里的 GroupName 是一直变的

  • 主 資深大佬 : starry97

    @Jacky23333 好的,我去找找,谢谢您。

  • 資深大佬 : GM

    直接用 Jackson 的 JsonNode 算了。

  • 資深大佬 : lxk11153

    @starry97 “但这里的 GroupName 是一直变的”?那就反序列化到 Map 类型呀。

  • 資深大佬 : Jacky23333

    你这个 json 的属性名是不可以变化的,也就是说 GroupName 应该是固定的,因为你说了你要转化成 javabean 嘛,javabean 字段是固定的,那 groupName 肯定也要是固定的呀,不过我看你的需求(json 的属性名是不固定的)那你不应该转化成 javabean,而是应该转化成 Map,这样你通过 Map.keySet 去遍历所有属性了

  • 主 資深大佬 : starry97

    感谢大家,已经解决了,还是我太菜了。
    解决方法:
    gson.fromJson(jsonStr, new TypeToken<HashMap<String, HashMap<String, JsonBean>>>(){}.getType());

  • 資深大佬 : lxk11153

    1. com.fasterxml.jackson.databind.ObjectMapper#readValue(String, TypeReference)
    —- new TypeReference<Map
    2. com.alibaba.fastjson.JSON#parseObject(String)

  • 資深大佬 : GM

    @starry97 搞那么复杂,Jackson 多好用
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode tree = objectMapper.readTree(jsonStr);

    JsonNode node = tree.get(“GroupName1”).get(“name1”);
    String name = node.get(“name”).asText();
    int age = node.get(“age”).asInt();

  • 資深大佬 : hand515

    Map<String,Map<String,User>>

    有时候挺反感这种 Json 定义的,遇到了还得多写不少行代码,用数组不好吗

  • 主 資深大佬 : starry97

    @GM tree.get(“GroupName1”).get(“name1”); 这个 GroupName1 和 name1 是一直变的,可以用遍历的方法将 tree 一层一层遍历出来吗?

  • 主 資深大佬 : starry97

    @hand515 GroupName1 里的 name 是一直变的,不好用数组表示吧

  • 資深大佬 : GM

    @starry97 可以

  • 資深大佬 : EminemW

    你的 json 结构应该弄成这样。我觉得你那样不太合适
    {
    “Group”:[
    {
    “GroupName”:”name1″,
    “member”:[
    {
    “name”:”li”,
    “age”:22
    },
    {
    “name”:”zhang”,
    “age”:23
    }
    ]
    },
    {
    “GroupName”:”name2″,
    “member”:[
    {
    “name”:”li”,
    “age”:22
    },
    {
    “name”:”zhang”,
    “age”:23
    },
    {
    “name”:”wang”,
    “age”:22
    }
    ]
    }
    ]
    }

  • 資深大佬 : cco

    JSON 设计也是一门艺术- -! 你这。。。。

  • 資深大佬 : NotFoundEgg

    不建议把业务参数当成 json 的 key
    偷懒一时爽 加参火葬场

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具