2012-12-05 44 views
0

如何解析以下內容以檢索以下內容。解析具有多個對象的json字符串

{"docs": [ 
    "SolrDocument[{content_type=[text/plain], description=/mnt/sdcard/A.txt, id=4df6fa43-1a99-4475-bc5b-80dd0ab6d114, name=uploadedfile}]", 
    "SolrDocument[{content_type=[text/plain], description=asdf.png, id=9fb20d5d-cf39-4635-9a22-64560124809e, name=uploadedfile}]"] 
} 

我需要檢索描述到一個字符串數組和id到另一個字符串數組。 我試圖

a="docs" 
JSONObject jobj = new JSONObject(line); 
JSONArray IDS = (JSONArray) jobj.get(a); 

這工作,但它返回一個字符串

+0

你試過的任何事情? –

+2

json實際上只代表一個包含兩個字符串的列表。然後您將需要使用正則表達式來從字符串中獲取描述。 – digitaljoel

+0

'docs'內的字符串不是有效的JSON。他們缺少字符串值的引號(並且鍵取決於您的JSON解析器的嚴格程度)和':'將鍵分開 –

回答

4

數組您要分析的數據是不是有效的JSON,所以你現在在正則表達式的領土。所以,讀每一行出JSONArray,你可以提取你所追求的是這樣的:

String data = "SolrDocument[{content_type=[text/plain], description=/mnt/sdcard/A.txt, id=4df6fa43-1a99-4475-bc5b-80dd0ab6d114, name=uploadedfile}]"; 
Pattern values = Pattern.compile("(description|id)=([\\S]+),", Pattern.CASE_INSENSITIVE); 
Matcher matches = values.matcher(data); 
while(matches.find()) { 
    System.out.println(matches.group(1) + "=" + matches.group(2)); 
} 

這將打印出:

description=/mnt/sdcard/A.txt 
id=4df6fa43-1a99-4475-bc5b-80dd0ab6d114 
0

的JSONArray裏面的「文檔」的元素不是有效的JSON對象。你必須有「鑰匙」:「價值」對纔能有效。

例如:

{ 
    "docs": [ 
     { 
      "id": 912345678901, 
      "text": "How do I read JSON on Android?", 
      "geo": null, 
      "user": { 
       "name": "android_newb", 
       "followers_count": 41 
      } 
     }, 
     { 
      "id": 912345678902, 
      "text": "@android_newb just use android.util.JsonReader!", 
      "geo": [ 
       50.454722, 
       -104.606667 
      ], 
      "user": { 
       "name": "jesse", 
       "followers_count": 2 
      } 
     } 
    ] 
} 

有很多網站可以驗證你的JSON,例如JSONLint

之前,我們可以回答你的問題,解決您的JSON。

+0

我明白了。在這裏,我需要解析字符串,然後將描述和ID的所有值轉換爲字符串數組 – ChanChow