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;//快照属性字段@JsonIgnoreprivate 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;}@Overridepublic 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字符串@Testpublic void test1() throws Exception {//1.创建Person对象Person p  = new Person();p.setName("张三");p.setAge(23);p.setSex("男");//2.创建Jackson的核心对象  ObjectMapperObjectMapper 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);//{Person{name='张三', 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);}#输出结果:#Person{name='张三', sex='男', age=23, birthday=null}#{"name":"张三","sex":"男","age":23,"birthday":null}/*格式化时间对象*/@Testpublic 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数组对象*/@Testpublic 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对象*/@Testpublic 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对象@Testpublic 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);//Person{name='张三', sex='男', age=23, birthday=null}}#输出结果:#Person{name='张三', sex='男', age=23, birthday=null}}

java对象转Json学习相关推荐

  1. java对象转json格式

    2019独角兽企业重金招聘Python工程师标准>>> 使用json-lib将java对象转换成json字符串 学会了在j2ee中使用ajax后,有时候从服务器返回客户端的数据是对象 ...

  2. java对象转json格式化_Java对象转json JsonFormat注解

    写在前面,首先,我用的java转json序列化的工具是java开源的jackson. 今天在做后端接口的时候,发现获取的json对象中少了几个属性,因为其他的接口都能得到正确的json,所以很快就找到 ...

  3. java 对象转json json转对象

    java 对象转json json转对象 import com.alibaba.fastjson.JSON;/*** * @title: fastjson * @author: wll* @since ...

  4. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了 JSON 处理,少不了需要在 JSON 中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON 字符串增加额外字段 假如我 ...

  5. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...

    将java对象转换为on对象,市面上有很多第三方jar包,如下: jackson(最常用) com.fasterxml.jackson.core jackson-databind 2.11.2 gso ...

  6. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  7. Java对象转换为Json对象

    前言 曾几何时,XML是程序员的宠儿,是数据传输.API.AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有很多人开始抛弃XML,在他们的心目中,JSON已经完全取代了XM ...

  8. java对象转json jackson_使用Jackson将Java对象转换为JSON

    我希望我的JSON看起来像这样: { "information": [{ "timestamp": "xxxx", "featur ...

  9. java对象和json对象之间互相转换

    2019独角兽企业重金招聘Python工程师标准>>> import java.util.ArrayList; import java.util.Collection; import ...

最新文章

  1. 借贷记账法下的账户对应关系_事业单位改用的借贷记账法
  2. springsecurity sessionregistry session共享_不用 Spring Security 可否?试试这个小而美的安全框架...
  3. boost::core模块实现交换primitive
  4. [Leetcode] Sqrt(x)
  5. UITableViewController
  6. Scala入门到精通——第二十三节 高级类型 (二)
  7. 使用rsync工具构建php项目管理平台
  8. 北京大学2019年数学分析考研试题
  9. PyQt5 关于自动补全 QCompleter
  10. 添加C1WPFChart快捷键
  11. 代写python assignment经常用到的代码语法分享!
  12. 债券收益率预测模型_利率预测模型系列之一:简单的N-S模型运用
  13. Mutual Information Neural Estimation梳理
  14. 1.2 SpringBoot构建Docker镜像并推送到Harbor
  15. 36个助你成为专家需要掌握的JavaScript概念
  16. hdu 4043 概率
  17. 拓嘉辰丰:拼多多订单退款流程有哪些?
  18. JS数据类型检测的坑和通用数据类型检测方法
  19. %load_ext autoreload是什么意思
  20. Union can only be performed on tables with the compatible column types

热门文章

  1. java接听电话freeswitch,FreeSWITCH--配置代接电话
  2. 基础数学复习(3)——曲线拟合
  3. java中判断字符串是否为数字的方法 StringUtil包函数
  4. [C/C++/Qt] 网易云音乐缓存文件批量自动解析解码工具 - CloudMusicCache2Mp3(开源)(Version:1.0)
  5. 【ArcGIS微课1000例】0034:地图线状符号设计教程
  6. ws2_32.dll和wsock32.dll
  7. Quartus18.1自带仿真工具实现仿真
  8. 为什么您的WordPress网站会容易被黑客攻击
  9. 游戏类APP应用周末下载量达最高
  10. 无障碍(二)检测与防范