所以我有一个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"}]}
我将如何正确地解析这个?
编辑:不,我不想让另一个图书馆解析它。
答案 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允许您在对象图中包含/排除特定对象。