java对象转json学习(代码片段)

qq_30000801 qq_30000801     2023-04-05     514

关键词:

java对象转Json学习

json多用于数据存储、交换与传输,json相比于xml更小,更快,更容易解析

  • 对象的表示方法

#java
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGander("男");

#javascript
var p = 
	"name":"张三",
	"age":"23",
	"gender":"男"
;
  • Json的基本样式

Json的数据存储在键值对中,键用单引号或者双引号引起来,也可以不用引号,值的类型可以是数字、字符串、布尔值、数组、对象或者null。

json1:
#键值对

	"name":"张三""sex":"male",
	"age":18,
	"area":"北京"

json2:
#数组作为value

	"data":[
		
			"name":"李四",
			"sex":"female",
			"age":19,
			"area":"上海"
		,
		
			"name":"王五",
			"sex":"male",
			"age":22,
			"area":深圳
		
	]
	"dep":"开发中心""code":105

json3:
#数组作为json对象
[
	
		"name":"张三",
		"sex":"male",
		"age":18,
		"area":"北京"
	,
	
		"name":"李四",
		"sex":"female",
		"age":19,
		"area":"上海"
	
]

通过json对象.键名、json对象[“键名”]、数组对象[索引]来获取json中存储的数据。

  • json和对象相互转换

常见解析器:jsonlib,gson,fastjson,jackson

以jackson为例,json转java对象一般步骤:

1、导入jackson相关的[jar包](链接:https://pan.baidu.com/s/1Kice6s4rjKZ3uODvmNX0ow?pwd=8pqz
提取码:8pqz)

2、创建jackson核心对象ObjectMapper

3、调用ObjectMapper的相关方法进行转换(readvalue(json字符串,class))

java对象转json一般步骤:

1、导入jackson相关jar包

2、创建jackson的核心对象ObjectMapper

3、调用ObjectMapper相关方法进行转换:

  • ​ writeValue(参数1,obj),参数1可以是三种形式:

​ File:将obj对象转化为json字符串并保存在指定的文件中;

​ Writer:将obj对象转化为json字符串,并将json数 填充到字符输出流中;

​ OutputStream:将obj对象转化为Json字符串,并将json数据填充到字节输出流中。

  • xxxxxxxxxx stream   upstream dbserver       server 172.16.1.51:3306;       server 172.16.1.52:3306;       server 172.16.1.53:3306;       server 172.16.1.54:3306;       server 172.16.1.55:3306;       server 172.16.1.56:3306;         server       listen 5555;       proxy_pass dbserver;   text

jackson相关注解:

1、@JsonIgnore

作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都会被这个注解影响

使用方法:标记在属性或者方法上方,表示该属性或者该方法生成json数据时不包含该属性或方法

使用场景:

​ 实体类中基本属性字段的值都存储在快照属性字段中,因此我们可以在业务层中将快照属性字段的值赋给实体类中对应的基本属性字段。但是需要将对象作为json传输的时候,我们希望返回的json数据中不包括快照字段,这时候在实体类中快照属性上添加注解@JsonIgnore,那么最后返回的json数据将不包含快照属性字段。

public class HistoryOrderBean 

    //基本属性字段
    private String insurantName;
    private String insuranceName;
    private String insurancePrice;
    private String insurancePicture;
    private String insuranceLimit;

    //快照属性字段
    @JsonIgnore
    private String goodsInfo;      //快照基本信息
    @JsonIgnore  
    private String extendsInfo;    //快照扩展属性信息


#需要注意的是,如果使用的是其他json转换器,忽略字段的注解大概率会不一样,比如fastJson中忽略字段的注解是@JSONField(serialize=false),使用方法是一样的

2、@JsonIgnoreProperties

这个注解是类注解,也就是用在java类的上面,它的作用和@JsonIgnore类似,在json序列化时将java bean中的一些属性忽略掉,同样序列化和反序列化都受这个注解的影响。

//生成json时将name和age属性过滤
@JsonIgnoreProperties("name","age")
	public class user 
	private String name;
	private int age;

3、@JsonFormat

这个注解一般用于Date类型属性上,可以指定Date类型的数据直接转化为我们想要的值,比如@JsonFormat(pattern=“yyyyMM-dd HH-mm-ss”)

4、@JsonSerialize

这个注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double类型数据时限制其后两位小数点。

5、@JsonDeserialize

这个注解和上面类似,只不过是用于反序列化

6、@Transient

标注了这个注解,ORM框架将忽略这个属性。如果一个属性并非数据库表的字段映射,就务必将这个属性标注为@Transient,否则ORM框架默认将其注解为@Basic

  • 效果测试

实体类Person:

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

import java.util.Date;

public class Person 
    private String name;
    private String sex;
    private int age;

    //@JsonIgnore     //忽略属性
    @JsonFormat(pattern = "yyyy-mm-dd")
    private Date birthday;

    public String getName() 
        return name;
    

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

    public String getSex() 
        return sex;
    

    public void setSex(String sex) 
        this.sex = sex;
    

    public int getAge() 
        return age;
    

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

    public Date getBirthday() 
        return birthday;
    

    public void setBirthday(Date birthday) 
        this.birthday = birthday;
    

    @Override
    public String toString() 
        return "Person" +
                "name='" + name + '\\'' +
                ", sex='" + sex + '\\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '';
    

测试类JacksonTest:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import java.io.File;
import java.io.FileWriter;
import java.util.*;

public class testJackson 


    //Java对象转为JSON字符串
    @Test
    public void test1() throws Exception 
        //1.创建Person对象
        Person p  = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");

        //2.创建Jackson的核心对象  ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //3.转换
        /*

            转换方法:
                writeValue(参数1,obj):
                    参数1:
                        File:将obj对象转换为JSON字符串,并保存到指定的文件中
                        Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
                writeValueAsString(obj):将对象转为json字符串
         */
        String json = mapper.writeValueAsString(p);
        //Personname='张三', sex='男', age=23, birthday=null
        System.out.println(p);
        System.out.println(json);//"name":"张三","age":23,"gender":"男"

        //writeValue,将数据写到d://a.txt文件中
        mapper.writeValue(new File("d://a.txt"),p);
        //writeValue.将数据关联到Writer中
        mapper.writeValue(new FileWriter("d://b.txt"),p);
    
    #输出结果:
    #Personname='张三', sex='男', age=23, birthday=null
	#"name":"张三","sex":"男","age":23,"birthday":null

    /*格式化时间对象*/
    @Test
    public void test2() throws Exception 
        //1.创建Person对象
        Person p = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");
        p.setBirthday(new Date());
        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        System.out.println(json);//"name":"张三","age":23,"gender":"男","birthday":1530958029263
        //"name":"张三","sex":"男","age":23,"birthday":"2020-30-21"
    
	#输出结果:
	#"name":"张三","sex":"男","age":23,"birthday":"2022-43-12"

    /*多个封装对象转json数组对象*/
    @Test
    public void test3() throws Exception 
        //1.创建Person对象
        Person p = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");
        p.setBirthday(new Date());

        Person p1 = new Person();
        p1.setName("李四");
        p1.setAge(19);
        p1.setSex("女");
        p1.setBirthday(new Date());

        Person p2 = new Person();
        p2.setName("王五");
        p2.setAge(22);
        p2.setSex("男");
        p2.setBirthday(new Date());
        //创建List集合
        List<Person> ps = new ArrayList<Person>();
        ps.add(p);
        ps.add(p1);
        ps.add(p2);
        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(ps);
        // [,,]
        //["name":"张三","sex":"男","age":23,"birthday":"2020-33-21","name":"张三","sex":"男","age":23,"birthday":"2020-33-21","name":"张三","sex":"男","age":23,"birthday":"2020-33-21"]
        System.out.println(json);
    
    #输出结果:
    #["name":"张三","sex":"男","age":23,"birthday":"2022-44-12","name":"李			
    #四","sex":"","age":19,"birthday":"2022-44-12","name":"王五","sex":"","age":22,"birthday":"2022-44-
    #12"]


    /*map对象转json对象*/
    @Test
    public void test4() throws Exception 
        //1.创建map对象
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name","张三");
        map.put("age",23);
        map.put("gender","男");


        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(map);
        //"name":"张三","age":23,"gender":"男"
        System.out.println(json);//"gender":"男","name":"张三","age":23
    
    #输出结果:
    #"gender":"男","name":"张三","age":23


    //演示 JSON字符串转为Java对象
    @Test
    public void test5() throws Exception 
        //1.初始化JSON字符串
        String json = "\\"sex\\":\\"男\\",\\"name\\":\\"张三\\",\\"age\\":23";

        //2.创建ObjectMapper对象
        ObjectMapper mapper = new ObjectMapper();
        //3.转换为Java对象 Person对象
        Person person = mapper.readValue(json, Person.class);

        System.out.println(person);//Personname='张三', sex='男', age=23, birthday=null
    
    #输出结果:
    #Personname='张三', sex='男', age=23, birthday=null


gson-学习(代码片段)

...Gson是一个非常强大的库,可以将JSON格式的数据转化成Java对象,也支持将Java对象转成JSON数据格式。Gson依赖本文将会快速开始使用Gson进行序列化操作。由于很多读者都是Android开发人员,我们会提供Java环境中的Gson。在开始之前... 查看详情

json字符串转java对象和list集合(代码片段)

对象POJO和JSON互转publicclassJsonUtil/***JSON转POJO*/publicstatic<T>TgetObject(Stringpojo,Class<T>tclass)tryreturnJSONObject.parseObject(pojo,tclass);catch(Exceptione)log.error(tclass+"转JSO 查看详情

java对象与json字符串的互转(代码片段)

JSON字符串转普通对象普通对象转JSON字符串JSON字符串数组转List集合对象List集合对象转JSON字符串数组JSON字符串转装有对象的Map装有对象的Map转JSON字符串最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难&... 查看详情

es6学习一--es5(代码片段)

JSON对象方法1.将JSON字符串转换成js对象(IE7及以下不支持)(IE7及以下兼容需其他手段)JSON.parse()2.将js对象转成JSON字符串JSON.stringify()3.js对象深度克隆JSON.parse(JSON.stringify(arrTwo))Object对象方法1.Object.create(prototype,[descriptors])  作用:... 查看详情

[java安全]fastjson学习(代码片段)

...学fastjson。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。它关键的方法就是三个:... 查看详情

[java安全]fastjson学习(代码片段)

...学fastjson。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存在的没有源码的对象。它关键的方法就是三个:... 查看详情

jackson学习笔记xml转json(代码片段)

...ncy>示例XML>JavaBean>Json常规思路,先将XML转成Java对象, 查看详情

猴子补丁(monkeypatch)(代码片段)

在java中自定义对象变成json串很简单,调用一个方法就行,但同样的转换在python中却不太容易实现。在寻找python自定义对象转json串的过程中,接触到了猴子补丁这个东西,感觉还有点意思;本文先实现python自定义对象转json串,... 查看详情

json对象互转问题记录(代码片段)

...的问题在项目里面前端接收的一个string类型的json转换成对象的时候报错cn.hutool.core.convert.ConvertException:NoConverterfortype[java.util.List]然后不服气的我拿出来研究了一下,结果发现在新建的工程里面没有问题。这就很尴尬了。本着... 查看详情

json对象互转问题记录(代码片段)

...的问题在项目里面前端接收的一个string类型的json转换成对象的时候报错cn.hutool.core.convert.ConvertException:NoConverterfortype[java.util.List]然后不服气的我拿出来研究了一下,结果发现在新建的工程里面没有问题。这就很尴尬了。本着... 查看详情

[java安全]fastjson学习(代码片段)

...都是懵的。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存 查看详情

[java安全]fastjson学习(代码片段)

...都是懵的。初认fastjsonFastjson是一个Java库,可以将Java对象转换为JSON格式,当然它也可以将JSON字符串转换为Java对象。Fastjson可以操作任何Java对象,即使是一些预先存 查看详情

数据交换json(代码片段)

JSON数据交换JSON概述JSON对象和字符串对象转换JSON在java中使用Javabean对象和json字符串的转换List对象和json字符串的转换map对象和json字符串的转换大家好呀,我是小笙,以下是我学习数据交换-JSON的学习笔记数据交换JSON概述... 查看详情

转:delphi语言最好的json代码库mormot学习笔记1

mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里---------------------------------------------------------在进行网络编程中需要JSON对象的构建与解析,这个Delphi XE+自带:{$IF CompilerVersion>22}, System. 查看详情

fastjson将字符串转java对象日期序列化异常日期格式报错解决(代码片段)

异常信息 com.alibaba.fastjson.JSONException:Forinputstring:"2022-12" atcom.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:693) atcom.alibaba.fastjson.JSON.parseObject(JSON.java:395) atcom.alibaba.fastjson.JSON.parseObject(JSON.java:299) atcom.alibaba.fastjs... 查看详情

fastjson将字符串转java对象日期序列化异常日期格式报错解决(代码片段)

异常信息 com.alibaba.fastjson.JSONException:Forinputstring:"2022-12" atcom.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:693) atcom.alibaba.fastjson.JSON.parseObject(JSON.java:395) atcom.alibaba.fastjson.JSON.parseObject(JSON.java:299) atcom.alibaba.fastjs... 查看详情

《java程序设计》第八周学习总结(代码片段)

...一、教材学习内容总结第十五章主要内容了解String类常量对象:常量池中的数据在程序运行期间再也不允许改变。String对象:用户无法输出String对象的引用。例如:Strings=newString(“iamastudent”);System.out.pintln(s);//输出对象的实... 查看详情

javaweb_json篇(代码片段)

...录JSON篇一、什么是JSON?二、JSON在JavaScript中的使用?2.1.JSON对象定义和基本使用2.1.1JSON的定义2.1.2JSON对象的访问2.2JSON中两个常用的方法三、JSON在java中的使用?3.1.java 查看详情