我尝试解析的一个json示例是:
[
{
"id": "123",
"a*": {
"b*": {
"prio": {
"d*": {
"id": "234",
"name": "test"
},
"d1*": {
"id": "678",
"name": "test1"
}
}
},
"b1*": {
"prio": {
"d2*": {
"id": "234",
"name": "test4"
}
},
"prio": {
"d3*": {
"id": "234",
"name": "test3"
}
}
}
},
"a1*": {
"b2*": {
"prio": {
"d5*": {
"id": "5435",
"name": "test2"
},
"d6*": {
"id": "675435438",
"name": "test15"
}
}
}
}
},
{
"id": "345",
"f*": {
"g*": {
"prio": {
"i*": {
"id": "5435",
"name": "test2"
}
}
}
}
},
{
"id": "342343"
}
]
出于解释的目的,带星号的那些在不同的json文件中总是有变化的键,实际的json文件可能在键中有星号,也可能没有星号。嵌套量不会比显示的嵌套更深,但有些可以更浅。prio
将始终处于相同的深度级别,我需要除了prio
之外的所有键名称。
我怎样用gson解析这个json?任何帮助都是感激的。
我想做的是(改名):
x一个一个一个一个x一个一个二个x
firstMap结果是null,我使用gson的原因是因为我已经在同一个包中使用了其他格式更简单的json文件。
1条答案
按热度按时间u0njafvf1#
firstMap结果为null。
这是因为你没有任何json元素名“firstMap”。GSON(和大多数JSON解析器)通过将json元素名Map到class字段来工作。如果你没有一致的元素名,那么你需要一个map来表示具有可变元素名的整个对象。
首先,看起来你在顶层有一个对象数组,所以确保你要求GSON解析一个数组对象。类似于:
那么什么是“ItemType”-数组中的每一项都有一个“id”,但后面有变量键,所以你不能使用
PolicyObject
类,你需要一个String到次要项类型的Map:那么什么是“SecondaryType”呢?同样,所有的键都是可变的,所以你需要一个map:
那么什么是“ThirdType”呢?好吧,在这一点上,似乎你知道你将有一个名为
"prio"
的键,所以你可以定义一个命名良好的类:那么什么是“Prio”呢?它似乎又包含了一个变量键列表,所以我们实际上又回到了通用Map:
那么什么是“FourthType”呢?它看起来像一个一致的“id”和“name”:
有了这些定义,我们回到:
你可以用一个类来清理这个问题,这个类是顶级的map:
然后你可以这样做:
免责声明:我不知道这是否真的能编译,但我认为它应该让你走上正确的道路。