【问题标题】:REparsing a JSON object in Java?在 Java 中重新解析 JSON 对象?
【发布时间】:2010-09-28 12:45:32
【问题描述】:

所以我有一个 JSONObject(或 String..),看起来像这样:

    {"locations":[{"GeocodeResponse":{"result":{"formatted_address":"Tchibanga (TCH), Gabon","address_component":[{"long_name":"Tchibanga","type":
["airport","establishment","transit_station"],"short_name":"Tchibanga"},{"long_name":"Mougoutsi","type":
["administrative_area_level_2","political"],"short_name":"Mougoutsi"},{"long_name":"Nyanga","type":
["administrative_area_level_1","political"],"short_name":"Nyanga"},{"long_name":"Gabon","type":
["country","political"],"short_name":"GA"}],"type":["airport","establishment","transit_station"],"geometry":
{"viewport":{"southwest":{"lng":"10.9968524","lat":"-2.8198146"},"northeast":{"lng":"11.0031476","lat":"-2.8135194"}},"location_type":"APPROXIMATE","location":{"lng":"11","lat":"-2.816667"}}},"status":"OK"}}]}

但是信息太多了,我只想说

{"locations":[{"id":"Tchibanga(TCH)","parentId":"TCH","airport":"Tchibanga","category":"Airport","location":{"longitude":"11","latitude":"-2.816667"},"name":"Nyanga","country":"GA"}]}

我将如何正确解析这个?

编辑:不,我对获取另一个库只是为了解析它不感兴趣。

【问题讨论】:

  • 您是否考虑过使用来自 json.org 的 JSON 库之一?
  • TMI,以什么方式?你想过滤掉东西,重写 JSON 还是其他的东西?是的,您确实想要另一个库,而不是来自 org.json 的概念验证库。即使你还不知道你需要它:)

标签: java json


【解决方案1】:

您需要从 here 获取 JSON 库(您必须编译源代码并确保类在您的类路径中)并创建一个 JSONObject

JSONObject 只是一个包含更多映射、数组和对象的映射。解析起来很容易(但很麻烦),因为嵌套太多了。让我们看看如何解析第一个long_name 的值。如果查看 JSON 源字符串,您将看到 long_name 的位置在 locations/GeocodeResponse/result/address_component 中。所以你会做这样的事情:

//create a jsonObject
JSONObject jsonObject = new JSONObject("{ \"locations\" ...<snipped>... ] }");

//run some getters until you get to the address_component
JSONArray locations = (JSONArray)jsonObject.get("locations");
JSONObject location = (JSONObject)locations.get(0); // get the first location
JSONObject geoCodeResponse = (JSONObject)location.get("GeocodeResponse");
JSONObject result = (JSONObject)geoCodeResponse.get("result");
JSONArray addressArray = (JSONArray)result.get("address_component");

//print out the long_name from the address
JSONObject address = (JSONObject)addressArray.get(0);
String longName = (String)address.get("long_name");
System.out.println(longName); //prints Tchibanga

但是,我建议您使用JsonPath 以使您的生活更轻松。

一旦你选择了你需要的元素,你就可以构造所需的输出JSONObject

【讨论】:

  • 有一个在线 JSON 格式化程序 (jsonformat.com) 可以更清楚地显示您的结构。
【解决方案2】:

看来您想要的只是将一个 JSON 块转换为不同的块。也许这个问题会对你有所帮助:XSLT equivalent for JSON

【讨论】:

    【解决方案3】:

    检查杰克逊图书馆。 http://jackson.codehaus.org/

    【讨论】:

      【解决方案4】:

      Flexjson 允许您在对象图中包含/排除特定对象。

      【讨论】:

        猜你喜欢
        • 2011-06-28
        • 2015-01-15
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多