本人刚学 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 2020-07-16 23:00:48 +08:00
定义一个结构相同的 pojo 不就可以了么?
|
2
Jacky23333 2020-07-16 23:01:09 +08:00 via Android
直接看 github 上面找 gson 文档就好啦,写的很详细
|
3
starry97 OP @GM 我看文档里定义结果相同的 pojo 是需要属性和 json 字段一致才行,但这里的 GroupName 是一直变的
|
4
starry97 OP @Jacky23333 好的,我去找找,谢谢您。
|
5
GM 2020-07-16 23:21:33 +08:00
直接用 Jackson 的 JsonNode 算了。
|
7
Jacky23333 2020-07-16 23:24:14 +08:00 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 2020-07-16 23:25:43 +08:00
1. com.fasterxml.jackson.databind.ObjectMapper#readValue(String, TypeReference)
---- new TypeReference<Map 2. com.alibaba.fastjson.JSON#parseObject(String) |
10
GM 2020-07-17 00:17:18 +08:00
@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
hand515 2020-07-17 08:24:14 +08:00 1
Map<String,Map<String,User>>
有时候挺反感这种 Json 定义的,遇到了还得多写不少行代码,用数组不好吗 |
12
starry97 OP @GM tree.get("GroupName1").get("name1"); 这个 GroupName1 和 name1 是一直变的,可以用遍历的方法将 tree 一层一层遍历出来吗?
|
15
EminemW 2020-07-17 15:32:50 +08:00
你的 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 } ] } ] } |
16
cco 2020-07-17 17:07:49 +08:00
JSON 设计也是一门艺术- -! 你这。。。。
|
17
NotFoundEgg 2020-07-18 19:33:19 +08:00
不建议把业务参数当成 json 的 key
偷懒一时爽 加参火葬场 |