如何在java中解析json

h79rfbju  于 2021-08-20  发布在  Java
关注(0)|答案(17)|浏览(437)

我有以下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"
             }
        ]
    }
hk8txs48

hk8txs4816#

如果希望从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");
t3irkdon

t3irkdon17#

为了便于示例,让我们假设您有一个类 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"}

更新
如果您想获取单个属性,也可以使用google库轻松完成:

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

相关问题