首页 > 其他分享 >Jackson记录

Jackson记录

时间:2023-12-06 14:44:26浏览次数:23  
标签:JsonNode Jackson String ObjectNode 记录 str 序列化 objectMapper

1.基本使用,序列化和反序列化

序列化

public class JacksonTest {
   static ObjectMapper objectMapper = new ObjectMapper();
    public static void main(String[] args) throws JsonProcessingException {
        Person person = new Person();
        person.setName("jacksonTest");
        person.setAge(38);

        String str = objectMapper.writeValueAsString(person);
        System.out.println(str);//{"name":"jacksonTest","age":38}
    }
}

反序列化

public class JacksonTest {
   static ObjectMapper objectMapper = new ObjectMapper();
    public static void main(String[] args) throws IOException {
        String str = "{\"name\":\"jacksonTest\",\"age\":38}";
        Person person = objectMapper.readValue(str, Person.class);
        System.out.println(person);//Person(name=jacksonTest, age=38)
    }
}

2.反序列化,转带有泛型的,例如List<String>, Map<String, Object> 等 使用 TypeReference

public class JacksonTest {
   static ObjectMapper objectMapper = new ObjectMapper();
    public static void main(String[] args) throws IOException {
        String str = "[{\"name\":\"jacksonTest1\",\"age\":38},{\"name\":\"jacksonTest2\",\"age\":238}]";
        List<Person> l1 = objectMapper.readValue(str, new TypeReference<List<Person>>() {});
        System.out.println(l1);

        List<Person> l2 = objectMapper.readValue(str, List.class);
        System.out.println(l2);
    }
}

上述代码分别展示了使用TypeReference和未使用TypeReference的情况
主要想说明不使用TypeReference,复杂对象json数组解析出来的是map。后续如果想遍历再调用Person对象的get方法会报错
类型展示
调用Per对象get方法报错

3.类比fastJson的JsonObject -> ObjectNode, JsonArray -> ArrayNode(内部是ObjectNode)

对象 数组
fastJson JsonObject JsonArray
Jackson JsonNode ArrayNode

JsonNode (主要说明ObjectNode)

创建

JsonNode不能像JsonObject直接new

//依赖于objectMapper创建
ObjectNode objectNode = objectMapper.createObjectNode();

//不依赖与objectMapper,使用JsonNodeFactory
ObjectNode objectNode = JsonNodeFactory.instance.objectNode();

添加

JsonNode是父类,不能直接put,它的子类ObjectNode表示是一个Object
只有ObjectNode才可以使用put或putPOJO方法添加元素

删除

remove(String fieldName)

查询元素

get(String fieldName);//如果查不到,返回一个null

with(String propertyName);//只能取ObjectNode,如果对应的value不是ObjectNode,会抛异常。如果取不到,会在原始json中插入一个空Object

path(String fieldName);//如果查不到,返回的不是null,而是一个MissingNode

at(String var1);//支持更灵活的路径表达,可以用于深度导航、过滤等
//JsonNode node = rootNode.at("/path/to/node");

ArrayNode

创建

ArrayNode的创建依赖于objectMapper

ArrayNode arrayNode = objectMapper.createArrayNode();

添加

add(JsonNode value)

删除

remove(int index)

查询元素

和JsonNode使用类似,要注意方法要使用入参是integer的

4.ObjectMapper的初始化配置

objectMapper可以做一些初始化配置
DeserializationFeature 反序列化的配置
SerializationFeature 序列化的配置

DeserializationFeature 说明
USE_BIG_DECIMAL_FOR_FLOATS
SerializationFeature 说明

标签:JsonNode,Jackson,String,ObjectNode,记录,str,序列化,objectMapper
From: https://www.cnblogs.com/randy123/p/17879507.html

相关文章

  • .NET 6 使用Nlog 记录日志到本地并写入SQLserver数据库
    1.安装Nlog对应Nuget包版本NLog:5.0.4NLog.Database:5.0.4NLog.Web.AspNetCore:5.1.4Microsoft.Data.SqlClient:5.0.0(写入SQLServer数据库用的)2.建表SQLCREATETABLE[dbo].[NLog]( [Id][bigint]IDENTITY(1,1)NOTNULL, [Application][nvarchar](50)NOTNULL, [Lo......
  • git操作记录
     gitconfig--globaluser.name"zxk" gitconfig--globaluser.email"[email protected]"cdlearngit/[email protected]:1880/zxk/learngit.git[zxk@node01learngit]$gitclonehttp://10.33.22.6:1880/zxk/le......
  • Windows11 剪切板历史记录
    前言全局说明复制、粘贴、剪切(ctrl+c、ctrl+v、ctrl+x)是平时最常用的功能。但是经查有两个内容或东西需要复制到一个同一个地方,就导致到重复的切换。无意中发现,Win11提供了一个,剪切板历史功能,这样就可以通过点击,把多次复制的东西一次粘贴到指定地方了。一、开启功能屏幕左......
  • FRP配置记录
    服务端:服务端太简单了,基本上也就两句话搞定:bind_addr="0.0.0.0"bindPort=7688 客户端:客户端较为简单,服务端到底开放什么端口其实是由客户端来确定的。serverAddr="sgt_180"serverPort=5566[[proxies]]name="mysql"type="tcp"localIP="127.0.0.1"localP......
  • Mongo查询记录
     场景1:根据用户分组,查询相同的用户下,同时包含多个角色 db.getCollection('Sys_RT_Rel_Role_User').aggregate([{$group:{_id:"$USER_CD",//根据什么字段分组 "ROLE_CD":{"$push":"$ROLE_CD"},//根据USER_CD分组,然后把ROLE_CD......
  • 使用技巧 | 红米 Redmi Note 12 Turbo优化记录(去广告等)
    原文链接:https://engapi.com/article/7569原文也是我写的。我的红米Redminote8pro6+128已有些卡顿,遂在K70推出之际下单了RedmiNote12Turbo16+1T当备机。以下记录红米Note12Turbo去广告和优化过程,小米/红米系列都可参考。1.去广告系统设置参考这里:小米/红米手机如何......
  • 使用ThinkPHP框架根据Excel内容批量处理图片名称详解记录
    ThinkPHP依赖以下环境Nginx+PHP,建议提前装好Composer,PHP、Composer需要设置好系统环境变量。1.通过Composer安装Laravel框架composercreate-projecttopthink/thinkthinkphp6启动服务测试cdthinkphp6phpthinkrun然后就可以在浏览器中访问http://localhost:8000如果不能显示......
  • 记录--Vue使用CDN引入,响应式失效?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助背景最近心血来潮,想要在本地开发时,也用CDN的方式引入Vue,想着既然通过CDN引入了,那么在项目中就没必要再importVue,然后把项目中引入Vue的地方都删掉,结果改完后,界面看似正常运行,但数据变更后,界面没有重新渲染。......
  • 图片相关问题记录
    1.cross-fade()半透明图片cross-fade()可以混合两个或多个图像,并按比例混合它们的不同部分。这个函数的语法如下:兼容性:chrome和safari,firefox不支持cross-fade(<image1>[,<image2>][,<percentage>])/*图片半透明带颜色*/background-image:-webkit-cross-fade(url......
  • 学习记录-CAN通信配置
    CAN通信配置1、MCU时钟配置在MCU配置里面点击“+”进行添加时钟,这里我选择配置的CAN5通信口,时钟频率为2.4E7,可添加分频,更改时钟频率 2、Port-IO口配置在原理图中找到CAN5对应的IO口,在软甲中,直接勾选CAN口,做映射处理即可。 3、CAN配置点击“+”添加一个CAN口,我这里选择......