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

需要使用JSON解析器(它是封装好的工具类),我们测试用用jackson
        * 常见的解析器:Jsonlib,Gson(谷歌),fastjson(阿里巴巴),jackson(MVC内嵌)
    
    一、 JSON转为Java对象步骤
        1. 导入jackson的相关jar包
        2. 创建Jackson核心对象 ObjectMapper
        3. 调用ObjectMapper的相关方法进行转换
            1. readValue(json字符串数据,要转换成的Class类型)
    二、 Java对象转换JSON
        1、使用步骤:
            (1). 导入jackson的相关jar包 --- 注意:拷贝到工程后记得更新
            (2). 创建Jackson核心对象 ObjectMapper
            (3). 调用ObjectMapper的相关方法进行转换
                * 转换方法:(jackson核心对象包含很多方法)
                    * writeValue(参数1,obj):
                        参数1:
                            File:将obj对象转换为JSON字符串,并保存到指定的文件中
                            Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                            OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
                    * writeValueAsString(obj):将对象转为json字符串

2. 注解:
            1. @JsonIgnore:排除属性。被排除的键值对就不会被转成字符串,比如在class中的某个成员变量前声明@JsonIgnore,在转换时就不会被转换为JSON字符串
            2. @JsonFormat:属性值得格式化。比如说我们Data数据,默认时是以毫秒格式存在,我们可以在定义该成员变量时加入 @JsonFormat注解来提前设置好格式
                * @JsonFormat(pattern = "yyyy-MM-dd")

3. 复杂java对象转换
            1. List:数组。转换成的结果格式为:[{},{},{},...]
            2. Map:和对象的格式一致。转成的结果格式为:{"键名":键值,"健名":键值,...}

三、举例:

Person.class

package cn.lwgk.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 boolean gender;@JsonFormat(pattern = "yyyy-MM-dd")private Date birthday;@JsonIgnoreprivate String from; //这个将不会执行Json转换public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender=" + gender +", birthday=" + birthday +", from='" + from + '\'' +'}';}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 boolean isGender() {return gender;}public void setGender(boolean gender) {this.gender = gender;}
}

JsonTest.class

package cn.lwgk.test;import cn.lwgk.domain.Person;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;import java.util.*;public class JsonTest {@Testpublic void TestJson01() throws Exception {//创建java对象Person p = new Person();p.setName("张珊");p.setAge(35);p.setGender(true);//创建jackson的核心对象 objectMapperObjectMapper obMap = new ObjectMapper();//转换/*转换方法:* writeValue(参数1,obj):参数1:File:将obj对象转换为JSON字符串,并保存到指定的文件中Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中* writeValueAsString(obj):将对象转为json字符串*/String s = obMap.writeValueAsString(p);System.out.println(s);}/*** 测试验证JsonIgnore、JsonFormat* @throws Exception*/@Testpublic void TestJson02() throws Exception {//创建java对象Person p = new Person();p.setName("李四");p.setAge(32);p.setGender(false);p.setBirthday(new Date());p.setFrom("江西抚州");//创建jackson的核心对象 objectMapperObjectMapper obMap = new ObjectMapper();String s = obMap.writeValueAsString(p); //{"name":"李四","age":32,"gender":false,"birthday":"2020-05-15"}System.out.println(s);}/*** 测试List转换Json* @throws Exception*/@Testpublic void TestJson03() throws Exception {//创建java对象Person p1 = new Person();p1.setName("张珊");p1.setAge(32);p1.setGender(false);p1.setBirthday(new Date());p1.setFrom("江西南昌");Person p2 = new Person();p2.setName("李四");p2.setAge(31);p2.setGender(true);p2.setBirthday(new Date());p2.setFrom("江西抚州");Person p3 = new Person();p3.setName("王五");p3.setAge(35);p3.setGender(true);p3.setBirthday(new Date());p3.setFrom("江西吉安");List<Person> pList = new ArrayList<Person>();pList.add(p1);pList.add(p2);pList.add(p3);//创建jackson的核心对象 objectMapperObjectMapper obMap = new ObjectMapper();//[{"name":"张珊","age":32,"gender":false,"birthday":"2020-05-15"},{"name":"李四","age":31,"gender":true,"birthday":"2020-05-15"},{"name":"王五","age":35,"gender":true,"birthday":"2020-05-15"}]String s = obMap.writeValueAsString(pList);System.out.println(s);}/*** 测试map转换为Json* @throws Exception*/@Testpublic void TestJson04() throws Exception {//创建map对象Map<String,Object> map = new HashMap<String,Object>();map.put("name","赵六");map.put("age",36);map.put("gender","男");//创建jackson的核心对象 objectMapperObjectMapper obMap = new ObjectMapper();//{"gender":"男","name":"赵六","age":36}String s = obMap.writeValueAsString(map);System.out.println(s);}/*** json转换为java对象* @throws Exception*/@Testpublic void TestJson05() throws Exception {//1、初始化JSON字符串String json= "{\"name\":\"张珊\",\"age\":32,\"gender\":false,\"birthday\":\"2020-05-15\"}";//2、创建ObjectMapper对象ObjectMapper obMap = new ObjectMapper();//3、转换为JAVA对象--- person对象Person p = obMap.readValue(json, Person.class);System.out.println(p);//Person{name='张珊', age=32, gender=false, birthday=Fri May 15 08:00:00 CST 2020, from='null'}}
}

7、JSON数据和Java对象的相互转换(客户端和服务器对象数据通讯用)相关推荐

  1. Android 架构之路 (1)-- Android 客户端与服务器的数据交互总结

    前言: 本文总结了 Android 客户端与服务器进行交互时,采用RESTful API +Json的交互方式,针对不同的数据形式以及不同的解析方法,如有不足之处,欢迎指正. 文章目录 1. Andr ...

  2. Java 接受reactjs数据_[Java教程]react.js 父子组件数据绑定实时通讯

    [Java教程]react.js 父子组件数据绑定实时通讯 0 2017-09-23 17:00:14 import React,{Component} from 'react'import Reac ...

  3. 解决客户端从服务器请求数据乱码问题

    当从服务器请求文本格式的内容时,很可能会出现乱码问题,这是因为服务器内容编码格式和客户端获取内容格编码式不一致导致. 如下: 服务器端 客户端 这时就不能直接使用通过网路请求得到的数据了,需要在客户端 ...

  4. 2016服务器系统如何查询真伪,数据查询的方法、客户端、服务器及系统

    1.一种数据查询的方法,其特征在于,包括: 客户端对数据搜索项的参数进行标识;其中,所述数据搜索项的参数包含:查询字段名称.比较条件及查询条件值: 获取标识后的数据搜索项的参数对应的参数值: 将所述标 ...

  5. android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

    在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有K ...

  6. 客户端与服务器的数据交互

    毕设需要接粗到一些关于app和前端后端的东西,学习记录一下. 首先不要管安卓端还是苹果端,现在一般都是响应式的app,放到安卓或者苹果或者pc或者平板都是没有问题的.一般采用的是http接口通讯,或者 ...

  7. ajax请求获取服务器数据,jquery.ajax发布从app引擎服务器获取数据的请求

    为noob问题道歉...... 您好,如何使用jQuery.ajax从appengine服务器的Python端获取数据?我知道如何使用ajax和适当的处理程序将数据发送到服务器,但我想知道是否有人可以 ...

  8. 客快物流大数据项目(二十):物流管理系统服务器的数据路径配置和软件下载存放位置

    目录 物流管理系统服务器 一.虚拟机数据路径配置 二.软件下载和存放位置

  9. Java实现客户端同步服务器端的数据

    用户在服务器web前端增加.修改.删除了数据后会导致客户端的数据与服务器端的数据不一致.为了能够使客户端和服务器端的数据一致,客户端需要同步服务器端的这些操作.主要的步骤为:"服务器端修改数 ...

最新文章

  1. PHP获取当前时间戳,当前时间、及解决时区问题
  2. seaborn系列 (5) | 柱状图countplot()
  3. 2016,成为更好的自己
  4. python表单提交文件_python3做multipart/form-data上传请求
  5. 人工神经网络心得体会_卷积神经网络学习心得
  6. LCD显示深究day01 mmap知识补充
  7. 发现一个奇怪的问题: 不能把文件取名为 con
  8. private关键字
  9. 96.不同的二叉搜索树(JavaScript)
  10. [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.7
  11. pid c语言算法plc,三种比较简单pid控制算法公式
  12. oracle切割字符串函数,Oracle字符串分割函数
  13. 深度学习入门资料整理
  14. Python里对于shape()的理解
  15. 外企8年,我学到的人性化,不止是宽容
  16. 数字电路之组合逻辑电路
  17. 父亲儿子计算机语言的书,关于父亲的作文500字5篇
  18. laraverl框架房源管理
  19. 【171期】面试官:小伙汁,Spring是怎么解决循环依赖的呢?
  20. Ubuntu连接上海大学校园网(ShuWlan-1x Shu(For All))

热门文章

  1. Kotlin 开发Android app(十九):文件读写和SharedPreferences内容存储
  2. 数据结构——栈(栈结构、栈面试题、栈的操作、栈结构实现、进制的转换)
  3. 交换机的带宽线速概念
  4. (node:22344) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permit
  5. lzo的正确c语言代码,LZO 使用跟介绍
  6. (弃更)一些黑科技和技巧
  7. [转]平凡是福,金玉满堂,莫之能守。富贵而骄,自遗其咎。
  8. html 页眉选项卡,步骤如下: (1)在插入选项卡的页眉和页脚选项组中单击【页眉】按钮...
  9. js动态生成html表格
  10. 【推荐算法】Knowledge-aware Graph Neural Networks with Label Smoothness Regularization(KGNN-LS)论文笔记