GSON我可以只转换部分JSON,我想要的那些使用GSON.fromJSON()

时间:2013-06-03 17:27:10

标签: java gson

我正在使用一个大型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。

提前感谢您提供的任何帮助。

1 个答案:

答案 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");