可以发现,在经过 JSONObject.toJSONString操作时,导致原来的顺序乱了!
原因:JSONObject把实体类转换为map时,不能保证原来的顺序,主要是JSONObject.toJSONString导致的
解决方案:
不要使用JSONObject.去转换JSON字符串,这个工具类不能保证转换后的顺序,网上有很多JSON转换的工具类。
这里我采用原始的转换方法,如下:
import java.util.LinkedHashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.alibaba.fastjson.JSONObject;
public class Test{
public static void main(String[] args) {
User user = new User("张三","勤奋的人",28);
//查看未转换前的user顺序
System.out.println(user); //结果为:User(name=张三, remark=勤奋的人, age=28)
//使用ObjectMapper转换为JSON 【这里会抛异常】
String json = new ObjectMapper().writeValueAsString(user);
//转换后的user顺序
System.out.println(json); //结果为:{"name":"张三","remark":"勤奋的人","age":28}
//把实体类user转换为map,依旧采用JSONObject即可 LinkedHashMap是为了保证转换的顺序
Map map = JSONObject.parseObject(json, LinkedHashMap.class);
System.out.println(map); //结果为:{name=张三, remark=勤奋的人, age=28}
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42675423/article/details/126362449
如何利用jackson,把对象中值为null或“”(空字符串)的属性不输出出来
from:
http://www.cnblogs.com/yangy608/p/3936848.html
1.实体上
@JsonInclude(Include.NON_NULL)
//将该标记放在属性上,如果该属性为NULL则不参与序列化
//如果放在类上边,那对这个类的全部属性起作用
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化
2.代码上
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
//通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
//Include.Include.ALWAYS 默认
//Include.NON_DEFAULT 属性为默认值不序列化
//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
//Include.NON_NULL 属性为NULL 不序列化
User user = new User(1,"",null);
String outJson = mapper.writeValueAsString(user);
System.out.println(outJson);
注意:只对VO起作用,Map List不起作用
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CellVo {
@ExcelProperty(index =0)
private String value1;
@ExcelProperty(index =1)
private String value2;
}
String json =new ObjectMapper().writeValueAsString(excelData);
System.out.println(json);