首页 > 其他分享 >jackson的使用

jackson的使用

时间:2023-08-27 11:34:49浏览次数:33  
标签:jackson name public 使用 import id fasterxml

1、jackson能做什么?

Jackson 被称为 "Java JSON 库 "或 "Java 的最佳 JSON 解析器"。不仅如此,Jackson 还是一套适用于 Java(和 JVM 平台)的数据处理工具,除了能处理json格式数据以外,
还能处理csv、xml、(java)properties等格式数据。

2、使用方法

  1. 处理json数据
  • maven中加入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>maven_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <jackson.version>2.13.3</jackson.version>
    </properties>
    <dependencies>
    <!--<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
    </dependency>-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    </dependencies>
</project>
  • 序列化
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test1 {
    static ObjectMapper objectMapper = new ObjectMapper();
    static {
        // 序列化时空值属性不序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        // jackson在反序列化时默认如果遇到未知属性(没有映射到属性并且没有setter或者handler来处理它)时会报错,可以通过以下配置解决
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
    }
    @Test
    public void test1() throws JsonProcessingException {
        MyBean myBean = new MyBean();
        myBean.setId(1);
        myBean.setName("My name");
        // bean
        String s = objectMapper.writeValueAsString(myBean);
        System.out.println(s);
        List<MyBean> list = new ArrayList<>();
        list.add(myBean);
        // list
        String s1 = objectMapper.writeValueAsString(list);
        System.out.println(s1);
        // map
        Map<String,Object> map = new HashMap<>();
        map.put("id",2);
        map.put("name","your name");
        String s2 = objectMapper.writeValueAsString(map);
        System.out.println(s2);
    }
}

class MyBean {
    public Integer id;
    public String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}


  • 反序列化
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test1 {
    static ObjectMapper objectMapper = new ObjectMapper();
    static {
        // 序列化时空值属性不序列化
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
        // jackson在反序列化时默认如果遇到未知属性(没有映射到属性并且没有setter或者handler来处理它)时会报错,可以通过以下配置解决
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
    }
    @Test
    public void test2() throws JsonProcessingException {
        String jsonStr = "{\"id\":1,\"name\":\"My name\"}";

        MyBean myBean = objectMapper.readValue(jsonStr, MyBean.class);
        System.out.println(myBean);
        String jsonStr1 = "[{\"id\":1,\"name\":\"My name\"}]";
        // 指定返回class为List.class的话,list中的类型是map类型
        List list = objectMapper.readValue(jsonStr1, List.class);
        System.out.println(list);
        // 使用TypeReference指定反序列化后的类型
        List<MyBean> list1 = objectMapper.readValue(jsonStr1, new TypeReference<List<MyBean>>() {});
        System.out.println(list1.get(0));

        // 使用TypeFactory构建反序列化后的类型
        CollectionType collectionType = objectMapper.getTypeFactory().constructCollectionType(List.class, MyBean.class);
        List<MyBean> list2 = objectMapper.readValue(jsonStr1, collectionType);
        System.out.println(list2.get(0));

    }
}

class MyBean {
    public Integer id;
    public String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyBean{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

标签:jackson,name,public,使用,import,id,fasterxml
From: https://www.cnblogs.com/mmcode/p/17660021.html

相关文章

  • 如何安装和使用 Latte Dock
    你知道什么是“停靠区Dock”吧,它通常是你的应用程序“停靠”的底栏,以便快速访问。许多发行版和桌面环境都提供了某种停靠实现。如果你的发行版没有“停靠区Dock”,或者你想尝试一些新的停靠应用,LatteDock是一个不错的选择。它类似于macOS上的停靠区,每次你用鼠标悬停在任何停......
  • 在Jupyter中使用AI写代码,如有神助,太惊艳了
    昨晚看到一个可以在JupyterLab中使用的AI代码辅助工具jupyter-ai,它的交互确实非常棒,可以直接聊天,也可以就笔记中的代码提问,最出彩的是生成笔记功能,还是蛮惊艳的。这里就极简介绍一下安装及用法第一步是创建环境并安装condacreate-njupyter-aipython=3.11condaactivateju......
  • 上市公司绿色创新效率数据计算(text mining方法的使用)
    需求:工作中需要计算上市公司绿色创新效率数据,需要首先利用text_preprocessing对文本提取值进行预处理,然后通过Textmining方法进行转换后计算处理,最后利用效率法来进行综合计算和归类存储,用于后续的深度数据挖掘。解决:importnltkfromnltk.corpusimportstopwordsfromnltk.tok......
  • Java使用Jsch执行Shell命令
    JSch是SSH2的纯Java实现。JSch允许您连接到sshd服务器并使用端口转发,X11转发,文件传输等,您可以将其功能集成到您自己的Java程序中。JSch获得BSD格式许可证。最初,我们开发这些东西的动机是允许我们的纯JavaX服务器WiredX的用户享受安全的X会话。所以,我们的努力主要是为了实现用......
  • 使用pdb调试openstack (How to debug openstack using pdb )
    终于摸索出了一个调试openstack的简单方法,使用pdb进行单步调试,对于分析代码很有帮助。注意,这个方法只适用于用devstack安装的openstack。调试主要是使用了一个脚本,这个脚本不记得是从哪下载的了,是用来重启使用devstack安装的openstack的各个服务的,后来,我又结合devstack的stack.sh和......
  • 使用 Java 生成二维码图片
    0x01准备(1)软件版本IntelliJIDEA2023.1.3JDK18Tomcat10.1.11Maven3.8.6(2)技术栈servletzxing谷歌项目生成黑白二维码并可以附上logoqrcodegithub开源项目基于并拓展zxing(3)创建项目创建空项目在菜单栏-文件-项目结构中设置JDK及语言级别......
  • 你的旧电脑是 “过时” 了,还是使用 Linux 的机会?
    导读很多时候,老旧的电脑往往被打上“过时”的标签。Linux 改变了这一现状。翻新旧电脑,让它重新为需要它的人所用。你可能经常听到有人说某个电脑、平板电脑或智能手机“过时了”。当你听到这样的说法时,花一分钟问问自己:“这个人说的是个人观点还是事实?”很多时候他......
  • C#邮件带附件发送成功后附件文件不能及时删除,报错该进程无法访问路径“”,因为它正在被
    背景在做邮件发送因为附件file控件是动态产出的,在后台只能以httpfilecollection方式循环获取,因为IE和FireFox兼容问题,IE下File.FileName获取的是文件的全路径而在FireFox下就只能获取到文件名,导致Attachmentattchment=newAttachment(File.FileName);火狐下会出错,因为File.......
  • 阿里Nacos注册中心相关简单使用
    使用服务端服务端安装及配置运行和配置中心一样,Nacos配置中心客户端添加依赖<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.1.RELEASE</version><......
  • 在vue中使用svg
    背景svg作为矢量图,放大不失真,但是如果在vue文件中直接引入svg的话会导致vue文件过长,不友好。想要在组件中使用的时候使用下面的方式来引入svg//svg-name的值就是svg图片的名称<svg-iconsvg-name="xueren"/>步骤在components下创建SvgIcon.vue文件,并引入assets/icons/sv......