用多个对象解析json字符串

时间:2012-12-05 17:43:47

标签: android 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);

这有效,但它返回一个字符串数组

2 个答案:

答案 0 :(得分:4)

您尝试解析的数据无效JSON,因此您现在处于RegEx区域。因此,从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

答案 1 :(得分:0)

JSONArray“docs”中的元素不是有效的JSON对象。您必须拥有“key”:“value”对才能生效。

例如:

{
    "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。