4. JSON字符串是如何被解析的?JsonParser了解一下
Posted BAT的乌托邦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4. JSON字符串是如何被解析的?JsonParser了解一下相关的知识,希望对你有一定的参考价值。
前言
各位好,我是A哥(YourBatman)。上篇文章: 聊完,「流式API」的写部分可以认为你已完全掌握了,本文了解它读的部分。
版本约定
-
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了解一下的主要内容,如果未能解决你的问题,请参考以下文章