
本人刚学 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 } }, } 1 GM Jul 16, 2020 定义一个结构相同的 pojo 不就可以了么? |
2 Jacky23333 Jul 16, 2020 via Android 直接看 github 上面找 gson 文档就好啦,写的很详细 |
4 starry97 OP @Jacky23333 好的,我去找找,谢谢您。 |
5 GM Jul 16, 2020 直接用 Jackson 的 JsonNode 算了。 |
7 Jacky23333 Jul 16, 2020 via Android 你这个 json 的属性名是不可以变化的,也就是说 GroupName 应该是固定的,因为你说了你要转化成 javabean 嘛,javabean 字段是固定的,那 groupName 肯定也要是固定的呀,不过我看你的需求(json 的属性名是不固定的)那你不应该转化成 javabean,而是应该转化成 Map,这样你通过 Map.keySet 去遍历所有属性了 |
8 starry97 OP 感谢大家,已经解决了,还是我太菜了。 解决方法: gson.fromJson(jsonStr, new TypeToken<HashMap<String, HashMap<String, JsonBean>>>(){}.getType()); |
9 lxk11153 Jul 16, 2020 1. com.fasterxml.jackson.databind.ObjectMapper#readValue(String, TypeReference) ---- new TypeReference<Map 2. com.alibaba.fastjson.JSON#parseObject(String) |
10 GM Jul 17, 2020 @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(); |
11 Finest Jul 17, 2020 Map<String,Map<String,User>> 有时候挺反感这种 Json 定义的,遇到了还得多写不少行代码,用数组不好吗 |
12 starry97 OP @GM tree.get("GroupName1").get("name1"); 这个 GroupName1 和 name1 是一直变的,可以用遍历的方法将 tree 一层一层遍历出来吗? |
15 EminemW Jul 17, 2020 你的 json 结构应该弄成这样。我觉得你那样不太合适 { "Group":[ { "GroupName":"name1", "member":[ { "name":"li", "age":22 }, { "name":"zhang", "age":23 } ] }, { "GroupName":"name2", "member":[ { "name":"li", "age":2 }, { "name":"zhang", "age":23 }, { "name":"wang", "age":22 } ] } ] } |
16 cco Jul 17, 2020 JSON 设计也是一门艺术- -! 你这。。。。 |
17 NotFoundEgg Jul 18, 2020 不建议把业务参数当成 json 的 key 偷懒一时爽 加参火葬场 |