如何在 Java 中解析 JSON Google GSON (Maven) Org.JSON (Maven) 杰克逊(梅文))

2022-08-31 03:56:39

我有以下 JSON 文本。如何解析它以获取 、 、 等的值?pageNamepagePicpost_id

{
  "pageInfo": {
    "pageName": "abc",
    "pagePic": "http://example.com/content.jpg"
  },
  "posts": [
    {
      "post_id": "123456789012_123456789012",
      "actor_id": "1234567890",
      "picOfPersonWhoPosted": "http://example.com/photo.jpg",
      "nameOfPersonWhoPosted": "Jane Doe",
      "message": "Sounds cool. Can't wait to see it!",
      "likesCount": "2",
      "comments": [],
      "timeOfPost": "1234567890"
    }
  ]
}

答案 1

org.json 库易于使用。

只要记住(在转换或使用像 和 这样的方法时),以 JSON 表示法表示getJSONObjectgetJSONArray

  • [ … ]表示一个数组,因此库会将其解析为JSONArray
  • { … }表示一个对象,因此库会将其解析为JSONObject

示例代码如下:

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts"); // notice that `"posts": [...]`
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

您可以从中找到更多示例: 在 Java 中解析 JSON

可下载的罐子: http://mvnrepository.com/artifact/org.json/json


答案 2

为了这个例子,让我们假设你有一个类 Person 只有一个 .name

private class Person {
    public String name;

    public Person(String name) {
        this.name = name;
    }
}

Google GSONMaven)

我个人最喜欢的是对象的JSON序列化/反序列化。

Gson g = new Gson();

Person person = g.fromJson("{\"name\": \"John\"}", Person.class);
System.out.println(person.name); //John

System.out.println(g.toJson(person)); // {"name":"John"}

更新

如果你想得到一个属性,你也可以用谷歌图书馆轻松做到这一点:

JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject();

System.out.println(jsonObject.get("name").getAsString()); //John

Org.JSONMaven)

如果你不需要对象反序列化,而只是简单地获取一个属性,你可以试试org.json(或者看看上面的GSON例子!)

JSONObject obj = new JSONObject("{\"name\": \"John\"}");

System.out.println(obj.getString("name")); //John

杰克逊梅文))

ObjectMapper mapper = new ObjectMapper();
Person user = mapper.readValue("{\"name\": \"John\"}", Person.class);

System.out.println(user.name); //John