用Java重新编写JSON对象?

时间:2010-09-28 12:45:32

标签: java json

所以我有一个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"}]}

我将如何正确地解析这个?

编辑:不,我不想让另一个图书馆解析它。

4 个答案:

答案 0 :(得分:1)

看来你想要的只是简单地将一块JSON转换成一个不同的块。也许这个问题可以帮到你:XSLT equivalent for JSON

答案 1 :(得分:1)

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

答案 2 :(得分: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

答案 3 :(得分:0)

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