Повторная обработка объекта JSON в Java? - PullRequest
0 голосов
/ 28 сентября 2010

Итак, у меня есть 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 ]

1 голос
/ 28 сентября 2010

Вам необходимо получить библиотеку JSON из здесь (вам нужно будет скомпилировать исходный код и убедиться, что классы находятся в вашем пути к классам) и создать JSONObject.

AJSONObject - это просто карта, содержащая больше карт, массивов и объектов.Его довольно легко (но громоздко) разобрать, потому что там так много вложений.Давайте посмотрим, как вы будете анализировать значение первого 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.

1 голос
/ 28 сентября 2010

Проверьте библиотеку Джексона. http://jackson.codehaus.org/

1 голос
/ 28 сентября 2010

Похоже, что вам нужно просто преобразовать блок JSON в другой блок. Может быть, этот вопрос поможет вам: XSLT-эквивалент для JSON

0 голосов
/ 28 сентября 2010

Flexjson позволяет включать / исключать определенные объекты в графе объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...