如何在Java中解析JSON? 推荐| Java Debug 笔记

923 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

如何在Java中解析JSON?

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

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

为了便于说明,假设您有一个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.JSONMaven

如果您不需要对象反序列化,而只需获取属性,则可以尝试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

文章翻译自 yl2gl72eozkinivz3vc6swkesy-ac4c6men2g7xr2a-translate.translate.goog/questions/2…

作者建议:Gson和jackson和fastjson作者都有用过,Gson能支持三层嵌套、jackson社区活跃,fastjson国内很火,但是也有不足,我看阿里云是没有用fastjson来解析json的

之所以我知道阿里云是没有用fastjson来解析json是因为,我对接了钉钉的api文档,在源代码中并未出现fastjson的身影,如果你感兴趣,可私信我要源码!

图片.png

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️