net.sf.json和 com.fasterxml.jackson中对象转json的区别
近期做项目的时候,发现使用net.sf.json包中的JSONObject或JSONArray将对象转为json数据结构存在一个坑。当对String类型的属性赋值为null情况下,转为json结构为"",但前端需要为null。而包com.fasterxml.jackson可以将原来null转为json中的null。特记录于此,举例说明如下:
User实体:
public class User {
String name;
Integer age;
public User() {
super();
}
public User(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
net.sf.json包
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class Test {
public static void main(String[] args) {
User user = new User("bob",12);
User user1 = new User(null,null);
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user); System.out.println(JSONObject.fromObject(user1)); JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray.toString()); Map<String, String> map = new HashMap<>();
map.put("data", null);
System.out.println(JSONObject.fromObject(map));
}
}
输出:
{"age":0,"name":""}
[{"age":0,"name":""},{"age":12,"name":"bob"}]
{"data":null}
从输出可以看出,JSONObject或JSONArray转换对象,当对象中String类型的属性值为null时,转换为json数据"",Integer属性为null时,转换为0.
另外,Map中值为null的情况,转为json数据为null。
com.fasterxml.jackson包
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; public class Test1 {
public static void main(String[] args) {
User user = new User("bob",12);
User user1 = new User(null,null);
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user); ObjectMapper objectMapper = new ObjectMapper();
try {
JsonNode jsonNode = objectMapper.readTree(objectMapper.writeValueAsString(list));
System.out.println(jsonNode.toString()); Map<String, String> map = new HashMap<>();
map.put("data", null);
System.out.println(objectMapper.writeValueAsString(map));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:
[{"name":null,"age":null},{"name":"bob","age":12}]
{"data":null}
采用该工具转换的时候,String属性为null情况,转换json后也为null;但Integer也会被转成null,这可能会引起其他问题。
Map中的null,转换为json也为null。
总结:
在转换json的时候,可以考虑使用net.sf.json工具,代码逻辑简单,并且不会出现Integer转为null的情况。当然需要跟前端保持一致。
参考:
https://www.yiibai.com/jackson/jackson_first_application.html
net.sf.json和 com.fasterxml.jackson中对象转json的区别的更多相关文章
- fasterxml.jackson 将对象转换为json报错处理
最近在做查询的数据遇到如下报错: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found ...
- jackson java对象和json对象的互相转换
概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...
- 为javasript中对象与json串之间转换的总结。
jQuery.json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象.数值.字符串和数组到 JSON 字符串,同时可转换 JSON ...
- spring中对象转json过滤(jackson)
spring自带的json解析器是jackson jackson注解 @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. @JsonFormat 此注解用于属性上,作用是把 ...
- Java中对象和json互相转换的工具类
package com.Dingyu.util; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...
- 如何决解项目中hibernate中多对多关系中对象转换json死循环
先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码: public class PageBean <T>{// ...
- java中对象转json,json转list,json转map
在IDEA中的springboot项目里写的一个测试例子,新建User类,四个字段,Long id , String password,String userName,int age; 以及带参构造, ...
- Jackson将对象转换为json字符串时,设置默认的时间格式
maven需要的依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...
- json--pyton中obj与json的互转,js中obj与json的互转
json 解释:json是一种跨平台的通用的数据格式 python中对象(obj)与json之间的相互转换 1.对象(obj)转json格式的字符串 json.dumps(res) res = () ...
随机推荐
- [转]C++结构体|类 内存对齐详解
内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 . 为什么需要内存对齐?对 ...
- Docker源码分析(三):Docker Daemon启动
1 前言 Docker诞生以来,便引领了轻量级虚拟化容器领域的技术热潮.在这一潮流下,Google.IBM.Redhat等业界翘楚纷纷加入Docker阵营.虽然目前Docker仍然主要基于Linux平 ...
- java 集合之HashMap
原文出处http://zhangshixi.iteye.com/blog/672697 1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操 ...
- N小时改变一次url时间戳的方法
//为url添加时间戳//time 为多长时间改变一次时间戳,以小时为单位function setTimeStamp(url, time){ var time = time || 4, ...
- EUI组件之ProgressBar
一.ProgressBar常规使用 拖动一个progressbar到exml 代码中使用 /** * 主页场景 * @author chenkai 2018/5/26 */ class HomeSce ...
- ios ASIHTTPRequest类库简介和使用说明
官方网站: http://allseeing-i.com/ASIHTTPRequest/ .可以从上面下载到最新源码,以及获取到相关的资料. 使用iOS SDK中的HTTP网络请求API,相当的复杂, ...
- Hibernate--快速上手
一.初识 Hibernate 经典的软件应用体系结构有三层:表示层(提供了与用户交互的接口,实现用户操作界面,展示用户需要的数据).业务逻辑层(完成业务流程,处理表示层提交的数据请求,并将要保存的数据 ...
- 110道python题+理解(不断更新)
此篇题目在网上已经广为流传,但好多都不做解释,所以我想着自己一道一道的做一遍,并将相关涉及的做个补充,个人知识毕竟片面,有不足的地方还请大家多多指正 一.请用一行代码实现1-100之和 >> ...
- vue 缓存的keepalive页面刷新数据
用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...
- kafka简介【转】
一.为什么需要消息系统 () 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独立的扩 ...