4. JSON字符串是如何被解析的?JsonParser了解一下

Posted BAT的乌托邦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4. JSON字符串是如何被解析的?JsonParser了解一下相关的知识,希望对你有一定的参考价值。

点击上方“ BAT的乌托邦 ”,选择“ 设为星标
后台回复“ 专栏 ”,开启专栏模式学习

前言

各位好,我是A哥(YourBatman)。上篇文章:  聊完,「流式API」的写部分可以认为你已完全掌握了,本文了解它读的部分。4. JSON字符串是如何被解析的?JsonParser了解一下

版本约定

  • Jackson版本: 2.11.0
  • Spring Framework版本: 5.2.6.RELEASE
  • Spring Boot版本: 2.3.0.RELEASE

小贴士:截止到本文,本系列「前面」所有示例都只仅仅导入jackson-core而已,后续若要新增jar包我会额外说明,否则相同

正文

什么叫读JSON?就是把一个JSON 「字符串」 解析为对象or树模型嘛,因此也称作解析JSON串。Jackson底层流式API使用JsonParser来完成「JSON字符串」的解析。

最简使用Demo

准备一个POJO:

@Data
public class Person {
    private String name;
    private Integer age;
}

测试用例:把一个JSON字符串绑定(封装)进一个POJO对象里

@Test
public void test1() throws IOException {
    String jsonStr = "{"name":"YourBatman","age":18}";
    Person person = new Person();

    JsonFactory factory = new JsonFactory();
    try (JsonParser jsonParser = factory.createParser(jsonStr)) {
        
        // 只要还没结束"}",就一直读
        while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
            String fieldname = jsonParser.getCurrentName();
            if ("name".equals(fieldname)) {
                jsonParser.nextToken();
                person.setName(jsonParser.getText());
            } else if ("age".equals(fieldname)) {
                jsonParser.nextToken();
                person.setAge(jsonParser.getIntValue());
            }
        }
        
        System.out.println(person);
    }
}

运行程序,输出:

Person(name=YourBatman, age=18)

成功把一个JSON字符串的值解析到Person对象。你可能会疑问,怎么这么麻烦?那当然,这是底层流式API,纯「手动档」嘛。你获得了性能,可不要失去一些便捷性嘛。

小贴士:底层流式API一般面向“专业人士”,应用级开发使用高阶API ObjectMapper即可。当然,读完本系列就能让你完全具备“专业人士”的实力

以上是关于4. JSON字符串是如何被解析的?JsonParser了解一下的主要内容,如果未能解决你的问题,请参考以下文章

如何解析嵌套的json?迅速

如何解析JSON使用Play框架

php数组转换成json格式后汉字怎么就被解析成字母了啊

JSON.parse() 与 JSON.stringify()

JS中如何将JSON的字符串解析成JSON数据格式

parse.JSON()报错是什么原因?