Jackson中JsonParser如何解析json呢?

书欣 Java经验 发布时间:2022-08-11 14:35:46 阅读数:10364 1
下文笔者讲述Jackson解析json的方法分享,如下所示

JsonParser简介

JsonParser类是底层JSon解析器
  类似于Java使用stAx解析xml
  但JsonParser仅仅解析Json
  JsonParser实现相较于ObjectMapper更底层
   所以它的解析速度更快

创建JsonParser

创建JsonParser需先创建JsonFactory
  JsonFactory用于创建JsonParser实例
     其中createParser方法
     实现对不同json来源
例:
创建JsonParser解析Json字符串
String userJson =
        "{ \"name\" : \"maomao\", \"age\" : 18 }";

JsonFactory factory = new JsonFactory();
JsonParser  parser  = factory.createParser(userJson);

JsonParser解析json

当创建完JsonParser实例后
即可解析json数据
JsonParser工作方式是将JSON分解成一系列标记(token)
逐个迭代这些标记进行解析
String userJson =
        "{ \"name\" : \"maomao\", \"age\" : 18 }";

JsonFactory factory = new JsonFactory();
JsonParser  parser  = factory.createParser(userJson);
while(!parser.isClosed()){
    JsonToken jsonToken = parser.nextToken();
    System.out.println("jsonToken = " + jsonToken);
}

注意事项:
   当JsonParser的isClosed()方法返回false
      则说明源json仍有标记没有被解析
   当JsonParser的nextToken()方法获得JsonToken
     可检查JsonToken实例的类型
	  JsonToken类提供一组常量表示标记类型:
	    START_OBJECT
		END_OBJECT
		START_ARRAY
		END_ARRAY
		FIELD_NAME
		VALUE_EMBEDDED_OBJECT
		VALUE_FALSE
		VALUE_TRUE
		VALUE_NULL
		VALUE_STRING
		VALUE_NUMBER_INT
		VALUE_NUMBER_FLOAT  

例:
   Jackson解析json完整示例分享
将字符串解析为json,然后转换读取值
String userJson =
        "{ \"name\" : \"maomao\", \"age\" : 18 }";

JsonFactory factory = new JsonFactory();
JsonParser  parser  = factory.createParser(userJson);

User user = new User();
while(!parser.isClosed()){
    JsonToken jsonToken = parser.nextToken();

    if(JsonToken.FIELD_NAME.equals(jsonToken)){
        String fieldName = parser.getCurrentName();
        System.out.println(fieldName);

        jsonToken = parser.nextToken();

        if("name".equals(fieldName)){
            user.name = parser.getValueAsString();
        } else if ("age".equals(fieldName)){
            user.age = parser.getValueAsInt();
        }
    }
}

System.out.println("user.name = " + user.name);
System.out.println("user.age = " + user.age);
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202208/16601998384212.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者