2

我正在使用一个大型 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 并使用对象的设置器。

我想知道是否有办法让 GSON 处理这个问题而不必自己解析 json。

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

4

1 回答 1

2

我不知道我是否很好地理解了你的问题,但是为了用 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");
于 2013-06-03T17:55:08.310 回答