2013-06-19 196 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爲傑克遜。落DAT-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

我解決了一點改進與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(), ...