2012-12-05 47 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