JSON数据和Java对象的相互转换

JSON数据和Java对象的相互转换

  • JSON解析器
  • 创建的解析器:Jsonlib,Gson,Fastjson,jackson

JSON转为Java对象

  • 使用步骤:
  • 导入jackson相关的jar包
  • 创建Jackson革新对象 ObjectMapper
  • 调用ObjectMapper的相关方法进行转换
    • readValue(json字符串,Class)
    @Test
    public void Test05() throws Exception {
        String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":19}";
        ObjectMapper mapper = new ObjectMapper();
        Person person = mapper.readValue(json, Person.class);
        System.out.println(person);//Person{name='张三', age=19, gender='男', date=null}
    }

Java对象转换JSON

  • 使用步骤:
  • 导入jackson相关的jar包
  • 创建Jackson革新对象 ObjectMapper
  • 调用ObjectMapper的相关方法进行转换
package com.ailyt;

import com.ailyt.domain.Person;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import java.io.FileWriter;

public class JacksonTest {
    //Java对象转为Json字符串
    @Test
    public void Test01() throws Exception {
        //创建Person对象
        Person person = new Person();
        person.setName("张三");
        person.setAge(17);
        person.setGender("男");

        //创建Jackson的核心对象ObjectMapper
        ObjectMapper mapper = new ObjectMapper();

        //转换
        /**
         * 转换方法:
         *  writerValue(参数1,obj)
         *      参数1:
         *          File:将obj对象转换为json字符串,并保存到指定的文件中
         *          Writer:将obj对象转换为json字符串,并将json数据填充到字符输出流中
         *          OutputStream:将obj对象转换为json字符串,并将json数据填充到字节输出流中
         *  writerValueAsString(obj):将对象转为json字符串
         */
        String json = mapper.writeValueAsString(person);
        System.out.println(json);//{"name":"张三","age":17,"gender":"男"}

        //writeValue 将文件写入到D:\\a.txt
        FileWriter fileWriter = new FileWriter("D:\\a.txt");
        mapper.writeValue(fileWriter,person);
        fileWriter.close();
    }
}

  • 注解:
  • @JsonIgnore:排除属性
  • @JsonFormat:属性值得格式化
package com.ailyt.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.Date;

public class Person {
    private String name;
    private int age;
    private String gender;
    //@JsonIgnore//忽略改属性
    @JsonFormat(pattern = "yyyy-MM-dd")//
    private Date date;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", date=" + date +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Person() {
    }

    public Person(String name, int age, String gender, Date date) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.date = date;
    }
}

    @Test
    public void Test02() throws Exception {
        //创建Person对象
        Person person = new Person();
        person.setName("张三");
        person.setAge(17);
        person.setGender("男");
        person.setDate(new Date());

        ObjectMapper mapper = new ObjectMapper();
        String value = mapper.writeValueAsString(person);
        System.out.println(value);//{"name":"张三","age":17,"gender":"男","date":1661051661487}
    }

复杂Java对象转换

  • List:数组
  • Map:对象格式一直
    @Test
    public void Test03() throws Exception {
        //创建Person对象
        Person person1 = new Person();
        person1.setName("张三");
        person1.setAge(17);
        person1.setGender("男");
        person1.setDate(new Date());

        Person person2 = new Person();
        person2.setName("李四");
        person2.setAge(15);
        person2.setGender("女");
        person2.setDate(new Date());

        Person person3 = new Person();
        person3.setName("王五");
        person3.setAge(21);
        person3.setGender("男");
        person3.setDate(new Date());

        ArrayList people = new ArrayList<>();

        Collections.addAll(people,person1,person2,person3);

        ObjectMapper mapper = new ObjectMapper();

        String s = mapper.writeValueAsString(people);
        System.out.println(s);//[{"name":"张三","age":17,"gender":"男","date":"2022-08-21"},{"name":"李四","age":15,"gender":"女","date":"2022-08-21"},{"name":"王五","age":21,"gender":"男","date":"2022-08-21"}]

    }

    @Test
    public void Test04() throws Exception {
        HashMap map = new HashMap<>();
        map.put("name","张三");
        map.put("age",19);
        map.put("gender",'男');

        ObjectMapper mapper = new ObjectMapper();

        String s = mapper.writeValueAsString(map);
        System.out.println(s);//{"gender":"男","name":"张三","age":19}
    }

Original: https://www.cnblogs.com/ailhy/p/16609663.html
Author: 我滴妈老弟
Title: JSON数据和Java对象的相互转换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575520/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaScript学习笔记

    《狂神说JS》课程笔记 tips:js——从面向对象编程到面向监狱编程……开个玩笑! 《狂神说JS》课程笔记 JavaScript概述 + JS的优点:适用…

    Java 2023年6月16日
    060
  • 分布式锁实现方案最全解读

    前言 对多线程有所了解的朋友一般都会熟悉一个概念:锁。 在多线程并发场景下,要保证在同一时刻只有一个线程可以操作某个业务、数据或者变量,通常需要使用加锁机制。比如 synchron…

    Java 2023年6月7日
    086
  • 关系数据库元数据处理类(二) 定义查询元数据接口

    1 /// 2 /// 数据库元数据处理 3 /// 4 public interface IMetadata 5 { 6 #region DataBase 7 /// 8 ///…

    Java 2023年6月5日
    084
  • ReentrantLock 公平锁源码 第1篇

    ReentrantLock 1 这篇还是接着ReentrantLock的公平锁,没看过第0篇的可以先去看上一篇https://www.cnblogs.com/sunankang/p…

    Java 2023年6月6日
    089
  • java获取月份日历信息(包含农历节气)

    1.新建一个util工具类 import java.util.*; public class MyCalendar { private int year = 0; private …

    Java 2023年6月13日
    090
  • 【IoT】MQTT Client软件-MQTTBox

    MQTTBox0.2.1下载:https://github.com/workswithweb/MQTTBox 环境对齐 PS E:\2000_AIoT\MQTTBox-master…

    Java 2023年5月29日
    076
  • 设计模式笔记(二):策略模式

    应用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一…

    Java 2023年6月6日
    086
  • CSS编码规范

    ———————- 加微信和老王聊技术、聊产品、 聊运营。 定期组织主题性远程语音讨论。 进群加微…

    Java 2023年5月29日
    059
  • Assert的使用和简单解释

    Assert 的简单使用 Document d = Jsoup.connect("http://www.baidu.com").get(); Assert.no…

    Java 2023年6月15日
    080
  • 【JDK】分析 String str=““ 与 new String()

    一、基础概念 为了讲清楚他们的差异,这里先介绍几个概念。 1.1 常量池 所谓常量池:顾名思义就是用来存放一些常量的。该常量是在 编译期被确定,并被保存在已编译的 .class文件…

    Java 2023年6月5日
    0103
  • 并发编程的基础知识篇

    计算机与进程和线程之间的关系 1.计算机中有一个重要的指标就是CPU,而CPU中又有一个重要的指标就和核心数。 2.每当我们开启一个软件的时候,如QQ,微信(运行中的程序,被称为进…

    Java 2023年6月15日
    096
  • [JVM] Java内存分配

    程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器。分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计算器来完成。 虚拟机栈 虚…

    Java 2023年6月5日
    077
  • 【转】高并发下秒杀商品,你必须知道的9个细节

    0.前言 高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。 秒杀一般出现在商城的促销活动中,指定…

    Java 2023年6月7日
    098
  • 用户管理

    用户管理 添加用户 基本语法 useradd 用户名 示例:添加一个用户名为tom的用户 useradd tom 细节说明 当创建用户成功后,会自动的创建和用户名同名的家目录 也可…

    Java 2023年6月5日
    099
  • 1、SOA开始

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/weiapro/p/7801545.htmlAuthor…

    Java 2023年6月13日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球