我正在使用一个大型JSON对象,它有多个请求的响应。
我正在处理的部分只需要很少的物体,而且它们并不总是在前面。 例如,json结构是:
**
json = {
mainDocument: {
element1: {
element11: "value11",
element12: {
element121: "value121"
}
},
element2: {
element21: {
element211: {
element2111: "value2111",
element2112: {
element21121: "value21121"
}
}
},
element22: "value22"
}
}
}
**
此结构可能会根据请求是否成功而发生变化。
现在, 我想创建一个值为element11,element 22,element21121。
的java对象目前我只是检查json并使用对象的setter。
我想知道是否有办法让GSON处理这个问题而不必自己解析json。
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
我不知道我是否理解你的问题,但是为了用Gson反序列化JSON响应,我认为最合适的方法是创建一个封装响应数据的类结构。在你的情况下像:
class Response
MainDocument mainDocument
class MainDocument
Element element1
Element element2
class Element
...
如果您只需要JSON中的一些数据,则可以省略类结构中的属性,Gson将忽略它们。如果一个对象在不同的响应中可以有不同的内容,你可以这样:
class Response
MainDocument mainDocument
Error error
Gson将使用根元素mainDocument
(如问题中的那个)或根元素error
来解析响应...这允许您使解析适应变量响应。 ..
显然,要遵循这种方法,您需要了解所有可能的响应结构。如果您的问题是您的JSON响应是绝对可变的,并且您无法创建一个类结构来包装它,那么您总是可以进行手动解析,如下所示:
JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(jsonString).getAsJsonObject();
String element21121 = rootObj
.getAsJsonObject("mainDocument")
.getAsJsonObject("element2")
.getAsJsonObject("element21")
.getAsJsonObject("element211")
.getAsJsonObject("element2112")
.getAsString("element21121");