31

我有以下 JSON ,我只对获取元素"status"和."lat""lng"

使用Gson,是否可以在不创建表示 JSON 内容的整个类结构的情况下解析此 JSON 以获取这些值?

JSON:

{
  "result": {
    "geometry": {
      "location": {
        "lat": 45.80355369999999,
        "lng": 15.9363229
      }
    }
  },
  "status": "OK"
}
4

2 回答 2

56

您不需要定义任何新类,您可以简单地使用 Gson 库附带的 JSON 对象。下面是一个简单的例子:

JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();
JsonObject locObj = rootObj.getAsJsonObject("result")
    .getAsJsonObject("geometry").getAsJsonObject("location");

String status = rootObj.get("status").getAsString();
String lat = locObj.get("lat").getAsString();
String lng = locObj.get("lng").getAsString();

System.out.printf("Status: %s, Latitude: %s, Longitude: %s\n", status,
        lat, lng);

干净利落。如果您发现自己一遍又一遍地重复相同的代码,那么您可以创建类来简化映射并消除重复。

于 2013-05-16T20:28:10.380 回答
6

这确实是可能的,但您必须创建一个自定义反序列化器有关详细信息,请参阅此处的Gson 文档和此处的Gson API Javadoc 。还可以在这里这里看看我的其他回应……如果您仍有疑问,请发表评论。

也就是说,在我看来,创建相应的类对您来说更容易解析它,甚至更多地考虑到您的 JSON 响应的简单性......但是,使用通常的方法,您只需要编写一些超级简单的类,编写一个自定义的反序列化器,虽然不是那么复杂,但它可能会花费你更长的时间,而且如果以后你需要一些 JSON 的其他数据,它会更难适应......

Gson 有一种操作方式,专为开发人员使用而设计,而不是为了寻找解决方法!

无论如何,你为什么不想使用类?如果你不喜欢在你的项目中有很多类,你可以只使用嵌套类,你的项目会看起来更干净......

于 2013-05-16T19:22:39.080 回答