如何在java中解析json

fnx2tebb  于 2021-07-12  发布在  Java
关注(0)|答案(17)|浏览(397)

我有以下json文本。如何解析它以获得 pageName , pagePic , post_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"
             }
        ]
    }
k4ymrczo

k4ymrczo16#

如果要从json创建java对象,反之亦然,请使用gson或jackson第三方jar等。

//from object to JSON 
Gson gson = new Gson();
gson.toJson(yourObject);

// from JSON to object 
yourObject o = gson.fromJson(JSONString,yourObject.class);

但是,如果你只想解析一个json字符串并获取一些值(或者从头开始创建一个json字符串通过网络发送),只需使用JaveeeJAR,它包含jsonreader、jsonarray、jsonobject等。你可能想下载该规范的实现,比如javax.json。通过这两个jar,我可以解析json并使用这些值。
这些api实际上遵循xml的dom/sax解析模型。

Response response = request.get(); // REST call 
    JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
    JsonArray jsonArray = jsonReader.readArray();
    ListIterator l = jsonArray.listIterator();
    while ( l.hasNext() ) {
          JsonObject j = (JsonObject)l.next();
          JsonObject ciAttr = j.getJsonObject("ciAttributes");
9cbw7uwe

9cbw7uwe17#

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

private class Person {
    public String name;

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

谷歌gson(maven)

我个人最喜欢的是对象的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.json(maven)

如果您不需要对象反序列化,只需要获取一个属性,您可以尝试org.json(或者查看上面的gson示例!)

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

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

Jackson(Maven)

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

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

相关问题