4. JSON字符串是如何被解析的?JsonParser了解一下
公司不是你家,领导不是你妈。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈、MyBatis、JVM、中间件等小而美的专栏供以免费学习。关注公众号【BAT的乌托邦】逐个击破,深入掌握,拒绝浅尝辄止。
- 前言
-
正文
- 最简使用Demo
- JsonToken
-
JsonParser的Feature
- 底层I/O流相关
-
支持非标准格式
- ALLOW_COMMENTS(false)
- ALLOW_YAML_COMMENTS(false)
- ALLOW_UNQUOTED_FIELD_NAMES(false)
- ALLOW_SINGLE_QUOTES(false)
- ALLOW_UNQUOTED_CONTROL_CHARS(false)
- ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER(false)
- ALLOW_NUMERIC_LEADING_ZEROS(false)
- ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS(false)
- ALLOW_NON_NUMERIC_NUMBERS(false)
- ALLOW_MISSING_VALUES(false)
- ALLOW_TRAILING_COMMA(false)
- 校验相关
- 其它
- 总结
前言
各位好,我是A哥(YourBatman)。上篇文章:3. 懂了这些,方敢在简历上说会用Jackson写JSON 聊完,流式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
即可。当然,读完本系列就能让你完全具备“专业人士”的实力