近期做项目的时候,发现使用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的区别的更多相关文章

  1. fasterxml.jackson 将对象转换为json报错处理

    最近在做查询的数据遇到如下报错: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found ...

  2. jackson java对象和json对象的互相转换

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...

  3. 为javasript中对象与json串之间转换的总结。

    jQuery.json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象.数值.字符串和数组到 JSON 字符串,同时可转换 JSON ...

  4. spring中对象转json过滤(jackson)

    spring自带的json解析器是jackson jackson注解 @JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. @JsonFormat 此注解用于属性上,作用是把 ...

  5. Java中对象和json互相转换的工具类

    package com.Dingyu.util; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...

  6. 如何决解项目中hibernate中多对多关系中对象转换json死循环

    先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码: public class PageBean <T>{// ...

  7. java中对象转json,json转list,json转map

    在IDEA中的springboot项目里写的一个测试例子,新建User类,四个字段,Long id , String password,String userName,int age; 以及带参构造, ...

  8. Jackson将对象转换为json字符串时,设置默认的时间格式

    maven需要的依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  9. json--pyton中obj与json的互转,js中obj与json的互转

    json 解释:json是一种跨平台的通用的数据格式 python中对象(obj)与json之间的相互转换 1.对象(obj)转json格式的字符串 json.dumps(res) res = () ...

随机推荐

  1. 【LNMP】 fileinfo扩展安装

    1  查看服务器php版本 : php -v 2  进入目录 , 解压相对应的PHP 版本压缩包, cd /lnmp1./srctar zxvf php-7.0.tar.gz 3  输入以下命令 cd ...

  2. Shell 将两个文件按列合并

    file1. 1 2 2 3 3 4 4 5 5 6 file2. a b b c c d d e e f 需要把file2的第二列合并到file1,使File1并成三列. 第一种方法:paste p ...

  3. sencha touch 入门系列 (三)sencha touch 项目创建

    通过上一章节的学习,我们的开发环境已经配置好了,接下来我们开始创建第一个sencha touch的项目,网络上很多sencha touch的教程都是手动搭建项目的, 不过手动搭建的项目缺少一些senc ...

  4. html5实现的一些效果

    一.网页换肤 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  5. [UML]UML 教程 - 第二部分

    UML作为软件开发典型的开发过程 业务过程模型创建 业务过程模型被用来定义发生在企业或组织内部的高级业务活动和业务过程,并且是建立用例模型的基础.一般来说业务过程模型比一个软件系统所能实现的更多(比如 ...

  6. java获取年份的第一天和最后一天

    Calendar cal = Calendar.getInstance();cal.set(Calendar.MONTH, 0);cal.set(Calendar.DATE, 1);String da ...

  7. 一致性哈希算法(consistent hashing)(转)

    http://blog.csdn.net/cywosp/article/details/23397179

  8. log file sync 事件(转)

    log file sync   log file sync等待时间发生在redo log从log buffer写入到log file期间. 下面对log file sync做个详细的解释.   何时发 ...

  9. OneThink友情链接插件使用!

    OneThink友情链接插件使用: 直接安装插件就好,查看数据库会有:onethink_links 这个表: 写 links 标签,调用友情链接: <?php namespace Common\ ...

  10. Hadoop集群搭建文档

      环境: Win7系统装虚拟机虚拟机VMware-workstation-full-9.0.0-812388.exe Linux系统Ubuntu12.0.4 JDK                j ...