概述

JSON是一种轻量化的数据传输格式,在各种场景都有运用。比如在ajax中,服务端的数据一般通过JSON字符串的格式传输给前端,前端ajax引擎自动将JSON字符串转化为JS对象(需要将ajax的返回内容格式设置为"json")。那么此时我们在后台服务器中就需要将封装好的JavaBean对象转化为JSON格式字符串来传输给前台ajax引擎,此时使用JSON转化工具将大大简化我们代码量。

首先我们需要明确的是什么是JSON格式

JSON格式有两种,一种是对象格式,另一种是数组格式(也可以叫集合)。

  • 对象格式:{"key1":value1,"key2":value2......}
  • 数组形式:[{对象1},{对象2}....]

   需要注意的是

  1. 这里的value可以是字符串形式,也可以是数值形式,还可以是布尔型(除了字符串形式需要打引号,其他两种都不用打)
  2. JSON严格的规定中,key是必须打双引号的,不能为单引号,所以在java代码手动连接JSON字符串时需要用转义字符。
  3. 虽然在跟多环境中兼容key不打引号的JSON格式,但为了在所有环境下兼容我们还是都加上双引号吧。

JSON转换工具的使用

    一. GSON转换工具的使用

  1. 在使用之前我们需要引入所需的jar包(gson-2.2.4.jar)。
  2. 创建Gson对象。
  3. 调用该对象的toJson()方法。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
CategoryService service=new CategoryService();
List<Category> list=service.getCategoryList();
//创建Gson对象
Gson gson=new Gson();
//调用toJson()方法
String json = gson.toJson(list);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(json);
}

二.JSONLib转换工具的使用

使用前需要导的包:

1.获取JSON字符串中的属性值(字符串->java对象)

public class Hello {
@Test
public void test() {
String jsonStr="{\"id\":\"123\",\"name\":\"tom\"}";
JSONObject json = JSONObject.fromObject(jsonStr);
int id = json.getInt("id");
String name=json.getString("name");
}
}

2.将Java对象转换成JSON字符串(java对象->字符串)

在演示之前我们给出一个JavaBean对象(省略get和set方法):

public class User {
private Long uid;
private String email;
private Long initSize; //get和set方法省略
}

     2.1 将List集合转换成JSON字符串数组形式(使用JSONArray对象)

public class Hello {
@Test
public void test() {
List<User> list=new ArrayList<>();
User u1 = new User();
u1.setUid(1L);
u1.setEmail("1@qq.com");
list.add(u1); User u2=new User();
u2.setUid(2L);
u2.setEmail("2@qq.com");
list.add(u2); //将List转换成Json字符串
JSONArray json = JSONArray.fromObject(list);
String jsonStr=json.toString(); System.out.println(jsonStr);
}
}

输出结果:

     2.2将JavaBean对象转换成JSON字符串对象形式(使用JSONObject方法)

public class Hello {
@Test
public void test() {
User u = new User();
u.setUid(1L);
u.setEmail("1@qq.com"); JSONArray json = JSONArray.fromObject(u);
String jsonStr=json.toString(); System.out.println(jsonStr);
}
}

输出结果:

   2.3.将现有对象转换成JSON字符串时,添加排除属性

在某些情况下,我们转换对象中不是所有属性都需要转换成JSON字符串中,此时我们只需要添加排除即可。例如在2.1和2.2中User对象中的initSize属性,我们不需要转换成字符串,我们只需要这么做。

public class Hello {
@Test
public void test() {
User u = new User();
u.setUid(1L);
u.setEmail("1@qq.com"); //添加排除
JsonConfig config=new JsonConfig();
config.setExcludes(new String[] {"initSize"}); JSONObject json = JSONObject.fromObject(u,config);
String jsonStr=json.toString(); System.out.println(jsonStr);
}
}

输出结果:

注:这里添加的排除,不是只对当前层级的Java对象有用,对当前层级中引用的其他对象中的属性同样有用。在有的Java对象中我们可能会封装引用类型的属性,也有可能多个对象的互相引用。在转换时会由于形成了死循环而报错。此时必须添加排除,破坏原先的循环嵌套才能成功转换。

Java对象的嵌套循环导致转换失败的问题,详见博主另一篇文章:

在SSH框架中,多个持久层对象相互引用,从而引发分页查询中,查询所得的持久化对象转换为JSON字符串报错的原因及解决方案

FastJSON使用

在演示FastJSON的操作之前,我们先给出后面需要用到两个实体类(其中getter和setter方法省略):

public class User {
private String name;
private int age; @Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
public class UserGroup {
private String name;
private List<User> users = new ArrayList<User>(); @Override
public String toString() {
return "UserGroup [name=" + name + ", users=" + users + "]";
}
}

一. 对象序列化

所谓序列化就是将对象转换成字符串

// 序列化
@Test
public void testObjectToJson() throws Exception {
User user1 = new User();
user1.setName("张三");
user1.setAge(12); // {"age":12,"name":"张三"}
String json = JSON.toJSONString(user1);
System.out.println(json);
} @Test
public void testObjectToArray() throws Exception {
User user1 = new User();
user1.setName("张三");
user1.setAge(12); User user2 = new User();
user2.setName("李四");
user2.setAge(12); List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2); UserGroup group = new UserGroup();
group.setUsers(list);
group.setName("root"); // 将List转成JSON
// [{"age":12,"name":"张三"},{"age":12,"name":"李四"}]
String json = JSON.toJSONString(list);
System.out.println(json); // 将UserGroup转换成Json
// {"name":"root","users":[{"age":12,"name":"张三"},{"age":12,"name":"李四"}]}
String json2 = JSON.toJSONString(group);
System.out.println(json2);
}

二. 定制序列化

// 定制序列化
//如果age属性<18,则在序列化时不显示该属性
@Test
public void testPrtopertyJson() throws Exception { PropertyFilter filter = new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
// 如果age属性<18,则在序列化时不显示该属性
if (name.equals("age")) {
if ((Integer) value < 18) {
return false;
}
}
return true;
}
};
User user1 = new User();
user1.setName("张三");
user1.setAge(18);
String jsonString = JSON.toJSONString(user1, filter);
System.out.println(jsonString);
}

三. 反序列化

// 反序列化为对象
@Test
public void testJsonToObj() throws Exception {
String json = "{\"age\":12,\"name\":\"张三\"}";
// JSON会尽最大可能转换成User对象
User user = JSON.parseObject(json, User.class);
System.out.println(user);
} // 反序列化为集合
@Test
public void testJsonToList() {
String json = "[{\"age\":12,\"name\":\"张三\"},{\"age\":12,\"name\":\"李四\"}]";
List<User> list = JSON.parseArray(json, User.class);
System.out.println(list);
} // 反序列化为对象,对象里面包含List集合
@Test
public void testJsonToObj2() throws Exception {
String json = "{\"name\":\"root\",\"users\":[{\"age\":12,\"name\":\"张三\"},{\"age\":12,\"name\":\"李四\"}]}";
UserGroup group = JSON.parseObject(json, UserGroup.class);
System.out.println(group); }

JSON转化工具的使用的更多相关文章

  1. json转化 ts定义网页工具

    json转化 ts定义 https://transform.tools/json-to-typescript

  2. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  3. Json解析工具Jackson(简单应用)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...

  4. Android进阶笔记17:3种JSON解析工具(org.json、fastjson、gson)

    一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...

  5. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

  6. Json转换工具

    import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterx ...

  7. at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) :json转化“$ref 循环引用”的问题

    原因: entity实体中存在@OneToMany,@ManyToOne注解,在转化json是产生了循环引用 报的错误 解决方法: springmvc @ResponseBody 默认的json转化用 ...

  8. Android进阶笔记14:3种JSON解析工具(org.json、fastjson、gson)

    一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...

  9. Json解析工具Jackson(使用注解)--jackson框架自定义的一些json解析注解

    Json解析工具Jackson(使用注解)--jackson框架自定义的一些json解析注解 @JsonIgnoreProperties 此注解是类注解,作用是json序列化时将Javabean中的一 ...

  10. 在线的JSON formate工具

    一个非常好的json formate工具 可以很容易发现json的错误,以及对json进行格式化 https://jsonformatter.curiousconcept.com/

随机推荐

  1. openGauss资源池化开发者入门指南(二)

    openGauss 资源池化开发者入门指南(二) 一.内容简介 openGauss 资源池化是 openGauss 推出的一种新型的集群架构.通过 DMS 和 DSS 组件,实现集群中多个节点的底层存 ...

  2. 学习Source Generators之打包成Nuget使用

    前面我们简单的实现了一个从swagger生成实体类的Generator,在实际使用中,通过nuget包引用使用会更方便,那么本篇文章将介绍如何将Generator打包成Nuget来使用. 打包Nuge ...

  3. Windows Server 2008 R2修复永恒之蓝漏洞

    一.情况描述 服务器安装的Windows Server 2008 R2 standard系统,通过扫描发现系统存在永恒之蓝漏洞MS17-010(CVE-2017-0143.CVE-2017-0144. ...

  4. 英语 one day

    前言 I do not know if it work,but just go. 内容 1.quote vt:摘要,引用 n:引语 He quote a passage from the presid ...

  5. js es6 介绍set,WeakSet

    前言 介绍一下es6 的set 和 weakset 正文 set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set ...

  6. 鸿蒙HarmonyOS实战-ArkUI组件(Shape)

    一.Shape Shape组件是用于创建2D形状和粒子效果的组件.它可以创建包括圆形.正方形.三角形和多边形等基本形状,同时还可以自定义形状.Shape组件创建各种不同的效果,例如火花.烟雾.雨滴等. ...

  7. 文件上传之Webshell连接方法

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" Websh ...

  8. 阿里云发布第四代神龙架构,提供业界首个大规模弹性RDMA加速能力

    ​简介:10月20日,2021年杭州云栖大会上,阿里云发布第四代神龙架构,升级至全新的eRMDA网络架构,是业界首个大规模弹性RDMA加速能力. 10月20日,2021年杭州云栖大会上,阿里云发布第四 ...

  9. TSDB时序数据库时序数据压缩解压技术浅析

    ​简介: 目前,物联网.工业互联网.车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器.智能设备数量急剧增加,随之而来的海量时序监控数据存储.处理问题,也为时序数据库高效压缩.存储数据能 ...

  10. [FAQ] GoLand 需要手动开启代码补全吗 ?

    使用 go mod download 下载模块到本地缓存中,之后 GoLand 就会根据输入自动代码提示. Other:[FAQ] Goland 始终没有包代码的提示 Link:https://www ...