2014-03-03 99 views
-1

我有一個問題我一直沒能找到解決的,因爲它不是相當直截了當我猜...讀JSON多維數組在Java中

在我的Java程序,我收到了串這樣的(從現有源,我不能改變它,可悲):

["a", 1, "b", 2, ["c", "d", 3], 4]

該字符串是一個有效的JSON陣列(沒有對象,因此沒有鍵/值對!)。數組的內容可能是完全隨機的(例如空),但也可以是多維的。

我需要找到一種方法來閱讀這在Java中。例如,在上面的例子中,input.get(4).get(2)應該給我3。我並不在乎是否所有內容都被轉換爲字符串,但我需要找到一種通過索引來訪問數據的方法。數據也可以是多個字符,儘管我的示例每個元素只顯示1個字符。

我該如何做到這一點?提前致謝!

編輯;我只知道我有多少元素期望根陣中,但也有幾十個病例,所以我真的不希望爲每個個案

+0

你不能使用[JSON庫(https://github.com/FasterXML /傑克遜)? – univerio

+0

@univerio問題是,這個JSON數組是完全隨機的,所以我不認爲這會工作,我試過但還沒有成功。如果你能告訴我如何,那太棒了! –

+0

@univerio我嘗試了很多..我試圖自己解析它,但被困在遞歸和確保每個'內部'數組關閉之前繼續,我試圖使用幾個JSON庫,但他們依賴JSON數組的靜態結構,或者JSON數組只包含相同的類型(例如,不包括字符串,整數和數組混合)..如果您知道任何內容,請幫助.. –

回答

4

選擇一個JSON庫。 其中任何

基本org.json

JSONArray array = new JSONArray(yourString); 
JSONArray arrayTwo = array.getJSONArray(4); 
int i = arrayTwo.getInt(2); 

GSON:

JsonElement element = new JsonParser().parse(json); 
JsonArray array = element.getAsJsonArray(); 
JsonArray arrayTwo = array.get(4).getAsJsonArray(); 
int i = arrayTwo.get(2).getAsInt(); 

等,等

+0

我看到我從來沒有在這裏找到答案。感謝您抽出時間在2014年向我解釋圖書館的概念。 –

1

使用傑克遜編程不同的東西2.3.0:

import com.fasterxml.jackson.databind.*; 

ObjectMapper mapper = new ObjectMapper(); 
JsonNode node = mapper.readTree("[\"a\", 1, \"b\", 2, [\"c\", \"d\", 3], 4]"); 
int i = node.path(4).path(2).intValue(); 
System.out.println(i); 

打印

3 

Javadoc文檔JsonNodehere