1

我有一个非常复杂的字符串,如下所示,

"data":"[
         {
           "id": "123456",
           "from": 
            {
               "name": "ABC",
               "id": "123"
             },

            "message": "isafh",
            "story": "Best Story",
            "properties": 
            [
             {
               "name": "By",
               "text": "PROUD TO BE AN INDIAN",
               "href": "www.xyz.com"
             }
           ],
           "privacy": 
           {
                      "value": ""
           },
           "type": "photo",
           "created_time": "2013-10-24T07:17:28+0000",
           "updated_time": "2013-10-24T07:17:28+0000"
          },
          {
           "id": "122423456",
            "from": 
             {
                "name": "ABCaasd",
                "id": "124233"
              },

             "message": "isafh",
             "story": "Best nice Story",
             "properties": 
             [
              {
                "name": "By",
                "text": "PROUD TO BE AN INDIAN",
                "href": "www.abc.com"
              }
            ],
            "privacy": 
            {
                       "value": ""
            },
           "type": "photo",
           "created_time": "2013-10-24T07:17:28+0000",
         },
         {
           Similar data as above {... }
         },
       ]"
"next token":"1233"

这里所有的 JSON 数据都在这些括号“[]”中,它们由“{ ... }”大括号分隔。这里我想要所有花括号中的消息、故事和属性。尝试了两件事,一是两次将所有内容再次放入 JSON 对象中,还尝试了一次无用的尝试来匹配正则表达式“消息:”,但即使这样也没有用。

从所有大括号中找到消息、故事和属性的方法是什么。

4

2 回答 2

4

正则表达式不适合解析复杂的数据结构,例如 JSON 或 HTML 文档。对我们来说幸运的是,那里有快速、可靠和免费的库可以很好地完成这项工作。

请参阅json.org 的 Java 解决方案,或json.org中列出的可以解析 JSON 的其他库列表(滚动到页面底部)。

使用 json.org 的库解析 JSON 文档非常简单,如下所示:

String json = "{ \"message\" : \"Hi, this is the value for the key \\\"message\\\"\" }";
JSONObject myObject = new JSONObject(json); // This line actually parses the JSON text
System.out.println(myObject.getString("message"));
于 2013-10-24T08:39:42.433 回答
1

使用像 google-gson 这样的 json 库https://code.google.com/p/google-gson/

这是一个使用 gson-1.7.1.jar 测试的工作示例,但它也应该适用于最新版本。

public static void main(String[] args) {
    String jsonData = "{\"data\":[{\"id\": \"123456\",\"from\": {\"name\": \"ABC\",\"id\": \"123\"},\"message\": \"isafh\",\"story\": \"Best Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.xyz.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\",\"updated_time\": \"2013-10-24T07:17:28+0000\"},{\"id\": \"122423456\",\"from\": {\"name\": \"ABCaasd\",\"id\": \"124233\"},\"message\": \"isafh\",\"story\": \"Best nice Story\",\"properties\": [{\"name\": \"By\",\"text\": \"PROUD TO BE AN INDIAN\",\"href\": \"www.abc.com\"}],\"privacy\": {\"value\": \"\"},\"type\": \"photo\",\"created_time\": \"2013-10-24T07:17:28+0000\"}],\"next token\":\"1233\"}";
    List<String> messages = parse(jsonData);
    for (String message : messages) {
        System.out.println(message);
    }
}

public static List<String> parse(String jsonData) {
    List<String> messages = new ArrayList<String>();
    JsonElement jsonElement = new JsonParser().parse(jsonData);
    JsonObject jsonTopObject = jsonElement.getAsJsonObject();
    JsonArray jsonArray = jsonTopObject.getAsJsonArray("data").getAsJsonArray();
    Iterator<JsonElement> iterator = jsonArray.iterator();
    while (iterator.hasNext()) {
        JsonObject jsonObject = iterator.next().getAsJsonObject();
        messages.add(jsonObject.get("message").getAsString());
    }
    return messages;
}

请注意,为了有效,您提供的 json 数据进行了细微更改。例如,包裹在 "{","}" 中以形成一个 json 对象,并且还位于您拥有的数据的末尾,"created_time": "2013-10-24T07:17:28+0000",},因此最后一个逗号已被删除。

于 2013-10-24T08:40:13.927 回答