近期做项目的时候,发现使用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. delphi中Case语法的使用方法

    Case 语句If...Then…Else 语句适合选项较少的情况,如果有很多选项的话利用If 语句就比较麻烦,在这种情况下,Case 语句就容易多了.Case 语句的语法如下: case <表 ...

  2. LeetCode - Delete Duplicate Emails

    Discription:Write a SQL query to delete all duplicate email entries in a table named Person, keeping ...

  3. Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里

    如果你是指自动筛选后,把筛选数据复制/粘贴到另外一个工作表中,不妨试试试 第一步选中筛选后的数据区域:第二步执行菜单命令“编辑/定位/定位条件/可见单元格”,确定:第三步单击复制按钮或者Ctrl+C或 ...

  4. Activity 设置切换动画

    extends://blog.csdn.net/luohaowang320/article/details/42124225 | http://blog.csdn.net/xuewater/artic ...

  5. angular -- ng-ui-route路由及其传递参数?page页面版

    前面有说过 ng-ui-route 使用 script 标签来做,但是很多时候,会通过引入模板页面的方式来实现: 具体代码: <!DOCTYPE html> <html lang=& ...

  6. mariadb安装配置

    CentOS 7安装MariaDB 详解以及相关配置 第一步:添加 MariaDB yum 仓库 首先在CentOS操作系统中/etc/yum.repos.d/目录下添加 MariaDB 的YUM配置 ...

  7. JS/Java/Python格式化金额

    //java代码 public static void main(String[] args) {     DecimalFormat myformat = new DecimalFormat(); ...

  8. hdu5542 The Battle of Chibi【树状数组】【离散化】

    The Battle of Chibi Time Limit: 6000/4000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Othe ...

  9. beans有无状态

    Spring Bean Scopes https://www.tutorialspoint.com/spring/spring_bean_scopes.htm When defining a < ...

  10. docker搭建oracle 11.2.0.3.0

    dockerfile 如下: FROM oraclelinux:-slim ARG ORACLE_BASE=/opt/oracle ARG ORACLE_HOME=/opt/oracle/produc ...