【问题标题】:Parse Complicated String in JSON JAVA [duplicate]在 JSON JAVA 中解析复杂的字符串 [重复]
【发布时间】:2013-11-02 20:50:52
【问题描述】:

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

"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 对象中,还尝试了一次无用的尝试来匹配正则表达式“消息:”,但即使这样也没有用。

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

【问题讨论】:

  • 这对 JSON 来说一点也不复杂,十几个不同的 Java/JSON 工具包(参见 json.org)中的任何一个都可以轻松处理。
  • 对于其他答案,我建议使用 Jackson(您可能需要 coredatabind 包)。

标签: java regex json string parsing


【解决方案1】:

使用 json 库,例如 google-gson 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",}, 的数据的末尾,因此最后一个逗号已被删除。

【讨论】:

  • 你好@melc。我试过你说的方法。但它对我不起作用。
  • @ashubhargave 用一个工作示例更新了答案。
  • 非常感谢@melc....这就像一个魅力...
【解决方案2】:

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

请参阅json.org's solution for 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"));

【讨论】:

  • 使用这个 JSONObject myObject = new JSONObject(json);它说构造函数没有为 String 作为参数定义。我想我没有使用正确的包。你能告诉我我应该使用哪个确切的包吗?目前我正在使用 linklink jars。谢谢.
  • @ashubhargave 你可以从here下载jar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多