2013-06-20 18 views
1

,我有一個長的JSON字符串與我想要提取的數據。無法在我的Java應用程序中以我想要的方式拆分字符串

[["19:05",2,"","19.3","26.7","74","1003.6","3.2","236.0","00 : 05 : 43","01 : 54 : 17","","","",null,"rain"],{"1":["2",3,"0","","","","","0","","4713","M",1],"2":["3",3,"0","","","","","0","","4714","M",1],"3":["3681",3,"0","","","","","0","","4715","M",1],"4":["28",4,"0","","","","","0","","4716","M",1],"5":["7",4,"0","","","","","1","","4717","M",1],"6":["13",3,"0","","","","","0","","4718","M",1],"7":["35",4,"0","","","","","0","","4719","M",0],"8":["82",4,"0","","","","","0","","4720","M",1],"9":["44",4,"0","","","","","0","","4721","D",1],"10":["193",4,"0","","","","","0","","4722","D",1],"11":["3347",3,"0","","","","","0","","4723","D",1],"12":["144",4,"0","","","","","0","","4724","D",1],"13":["90",4,"0","","","","","0","","4726","D",0],"14":["89",4,"0","","","","","1","","4727","D",1],"15":["3582",2,"1","","","","5:36.746","0","","4728","D",1],"16":["64",4,"0","","","","","0","","4729","M",0],"17":["78",4,"0","","","","","0","","4730","D",0],"18":["3577",4,"0","","","","","0","","4731","D",1],"19":["38",3,"0","","","","","0","","4732","M",0],"20":["3686",3,"0","","","","","0","","4733","D",0],"21":["1351",4,"0","","","","","0","","4772","D",0],"22":["3689",4,"0","","","","","0","","4734","D",0],"23":["104",4,"0","","","","","0","","4735","D",1],"24":["3693",4,"0","","","","","0","","4736","D",1],"25":["249",4,"0","","","","","0","","4769","D",0],"26":["16",4,"0","","","","","0","","4738","D",1],"27":["171",4,"0","","","","","0","","4739","D",0],"28":["3670",4,"0","","","","","0","","4740","M",0],"29":["3588",4,"0","","","","","0","","4741","D",0],"30":["77",4,"0","","","","","0","","4742","M",1],"31":["151",4,"0","","","","","0","","4755","M",1],"32":["53",4,"0","","","","","0","","4743","M",1],"33":["267",4,"0","","","","","0","","4751","M",0],"34":["3671",4,"0","","","","","0","","4756","M",1],"35":["155",4,"0","","","","","0","","4757","M",1],"36":["153",4,"0","","","","","0","","4758","M",1],"37":["3672",4,"0","","","","","0","","4759","M",1],"38":["3328",4,"0","","","","","0","","4744","D",0],"39":["130",4,"0","","","","","0","","4760","M",1],"40":["3677",4,"0","","","","","0","","4761","M",1],"41":["97",4,"0","","","","","0","","4745","M",1],"42":["101",4,"0","","","","","0","","4746","M",0],"43":["102",3,"0","","","","","0","","4747","M",0],"44":["40",3,"0","","","","","0","","4819","M",0],"45":["129",4,"0","","","","","0","","4762","M",1],"46":["2777",4,"0","","","","","0","","4763","M",0],"47":["3352",4,"0","","","","","0","","4764","M",1],"48":["169",4,"0","","","","","0","","4765","M",1],"49":["120",4,"0","","","","","0","","4748","M",1],"50":["137",3,"0","","","","","0","","4749","M",1],"51":["3678",4,"0","","","","","0","","4750","M",0],"52":["87",3,"0","","","","","0","","4766","M",1],"53":["299",3,"0","","","","","0","","4767","M",1],"54":["19",3,"0","","","","","0","","4752","M",1],"55":["333",4,"0","","","","","1","","4753","M",1],"56":["81",3,"0","","","","","0","","4754","M",1]}] 

我想什麼來提取的字符串的對象部分(括號內)下這種形式"56":["81",3,"0","","","","","0","","4754","M",1],並從他們那裏得到所有這些數據:"81",3,"0","","","","","0","","4754","M",1,並能夠訪問他們的數字。

要做到這一點,我已經試過這樣:

for(int i = 1; i > 0; i++) { 
    String d; 
    try { 
     d = data.split("\"" + i + "\"\\:\\[")[1]; 
     d = d.split("\\]")[0]; 
    } catch(Exception e) { 
     e.printStackTrace(); 
     System.out.println("quit"); 
     break; 
    } 
} 

的問題是,我得到一個數組越界例外,從這個data.split("\"" + i + "\"\\:\\[")[1]的斯塔-退出。我的猜測是我搞亂了正則表達式,但我真的不知道在哪裏。謝謝你的幫助。

回答

4

更好地使用JSON Java庫。這真的會簡化你的解析。以下是如何提取所需的最後一個數組並將其所有值輸出到控制檯的示例。

final JSONArray root = new JSONArray(YOUR_JSON_STRING); 

final JSONObject numData = root.getJSONObject(1); 
final JSONArray numArray = numData.getJSONArray("56"); 

for (int i = 0; i < numArray.length(); ++i) { 
    if (i == 1 || i == 11) 
     System.out.print(numArray.getInt(i)+","); 
    else 
     System.out.print(numArray.getString(i)+","); 
} 
// prints: "81",3,"0","","","","","0","","4754","M",1, 

參考
JSON Java API docs

+0

謝謝老兄。幫了我很多。 –

+0

@zeokila不客氣。 –

2

JSON數據應該使用JSON parser來提取,而不能使用正則表達式或任何其他類型的低級字符串處理代碼。

+0

看起來他從來沒有退出for循環中,這可能會造成OOB例外。 – Azoreo

+1

對你來說,診斷OP的實際問題是正確的。 –

2

看起來你永遠不會退出FOR語句,因爲它缺少上界。

的for(int i = 1; i> 0; i ++在)

只要 「I> 0」,FOR語句將繼續下去,你已經在1開始我和你不斷增加它,所以它永遠不會小於或等於零。

如果可以抓住與array.length數組大小或一些其他方法,改變你的FOR語句:

對(INT I = 1; I> array.length;我++)

那可能會解決這個問題。

相關問題