2013-06-19 2 views
2

Я использую следующую библиотеку для разбора объекта:Java JSON синтаксического анализа массив

{"name": "web", "services": []} 

И следующий код

import com.json.parsers.JSONParser; 


JSONParser parser = new JSONParser(); 
Object obj = parser.parseJson(stringJson); 

когда услуги массива пусты, он выводит следующее сообщение об ошибке

@Key-Heirarchy::root/services[0]/ @Key:: Value is expected but found [email protected]::29 

если у службы массива есть элемент, все работает нормально

{"name": "web", "services": ["one"]} 

Как это исправить?

Благодаря

+4

Шаг 1: использовать джексон http://wiki.fasterxml.com/JacksonHome Шаг 2: Спасибо мне позже. – whaley

+0

+1 для Джексона. Drop-Дат-Lib. – Enrichman

ответ

1

Попробуйте использовать org.json.simple.parser.JSONParser Что-то вроде этого:

JSONParser parser = new JSONParser(); 
JSONObject jsonObject = (JSONObject) parser.parse(stringJson); 

Теперь доступ к полям, вы можете сделать это:

JSONObject name = jsonObject.get("name"); //gives you 'web' 

И services является JSONArray, поэтому выборка это в JSONArray. Как это:

JSONArray services = jsonObject.get("services"); 

Теперь вы можете перемещаться по этому services JSONArray, а также.

Iterator<JSONObject> iterator = services.iterator(); 
// iterate through json array 
while (iterator.hasNext()) { 
    // do something. Fetch fields in services array. 
} 

Надеюсь, это решит вашу проблему.

0

Зачем вам нужен парсер? попробовать это: -

String stringJson = "{\"name\": \"web\", \"services\": []}"; 
JSONObject obj = JSONObject.fromObject(stringJson); 
System.out.println(obj); 
System.out.println(obj.get("name")); 
System.out.println(obj.get("services")); 
JSONArray arr = obj.getJSONArray("services"); 
System.out.println(arr.size()); 
0

Я решить problen с https://github.com/ralfstx/minimal-json

чтения JSON

Почитаю объект JSON или массив из ридера или строки:

JsonObject jsonObject = JsonObject.readFrom(jsonString); 
JsonArray jsonArray = JsonArray.readFrom(jsonReader); 

Доступ к содержание объекта JSON:

String name = jsonObject.get("name").asString(); 
int age = jsonObject.get("age").asInt(); // asLong(), asFloat(), asDouble(), ... 

доступа содержимое массива JSON:

String name = jsonArray.get(0).asString(); 
int age = jsonArray.get(1).asInt(); // asLong(), asFloat(), asDouble(), ... 
Смежные вопросы