工具篇-Json处理

1. @JsonProperty和@SerializedName注解

  • 使用场景
将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串中的字段跟java对象中定义的属性名不一致,需要在java对象的属性上加上@JsonProperty或@SerializedName进行转换。
  • 示例
1 @JsonProperty("jsonName")
2 private String name;
或者 1 @SerializedName("jsonName")
2 private String name;
  • 区别
JsonProperty注解使用的是 Jackson包,SerializedName注解使用的是 Gson包,使用时避免包冲突。附上两个包的官方网站:

2. FastJson(该部分主要参考:FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换

FastJson主要用到了以下三个类:
JSON:FastJson的解析器,用于JSON格式字符串、JSON对象及javaBean之间的转换;

Json对象JSONObject

Json数组对象JSONArray

JSONObject和JSONArray继承了JSON,可以直接用于转换。首先,JSONObject本质上可以看作一个Map<String,Object>

1 public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler {

然后,JSONArray本质上可以看作是一个List<Object>

1 public class JSONArray extends JSON implements List<Object>, Cloneable, RandomAccess, Serializable {

FastJson的一些使用如下所示:

  • Json串转换成JSONObject

原始字符串:
1 {"header":{"code":0,"message":"SUCCESS"},"data":{"id":48,"metric.name":"test_hk_1","metric.type":"kafka_commit","partition.lag":false,"group.id":""}}
转换过程:
1 import com.alibaba.fastjson.JSONObject;
2 JSONObject jsonObject = JSONObject.parseObject(contentAsString).getJSONObject("data");
  • JSONObject转换成Json字符串
1 String str = JSONObject.toJSONString(jsonObject);
  • Json字符串转换成JSONArray

原始字符串

1 private static final String  JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";

转换过程

1 import com.alibaba.fastjson.JSONArray;
2         JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR);
3         
4         for (Object obj : jsonArray) {
5             JSONObject jsonObject = (JSONObject) obj;
6         }
7 }    
  • Json字符串转换成JavaBean

原始字符串同上例,JavaBean如下所示

 1 public class Student {
 2 
 3     private String studentName;
 4     private Integer studentAge;
 5 
 6     public String getStudentName() {
 7         return studentName;
 8     }
 9 
10     public void setStudentName(String studentName) {
11         this.studentName = studentName;
12     }
13 
14     public Integer getStudentAge() {
15         return studentAge;
16     }
17 
18     public void setStudentAge(Integer studentAge) {
19         this.studentAge = studentAge;
20     }
21 }

转换过程

1 Student student = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});

或者

1 Student student = JSONObject.parseObject(JSON_OBJ_STR, Student.class);
  • JavaBean转换成Json字符串
1 String res = JSON.toJSONString(student);

⚠️注意⚠️:如果这里student对象没有getter方法,无法转换成Json字符串的。另外,在转换Json字符串的过程中,可以对特殊字段进行设置,比如将对象中属性的null值输出:

1 String str = JSONObject.toJSONString(student, SerializerFeature.WriteMapNullValue);
QuoteFieldNames输出key时是否使用双引号,默认为true
WriteMapNullValue输出值为null的字段,是否默认为false
WriteNullNumberAsZero数值字段如果为null,输出为0,而非null
WriteNullListAsEmptyList字段如果为null,输出为[],而非null
WriteNullStringAsEmpty字符类型字段如果为null,输出为"",而非null
WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非null

  • JavaBean转换成JSONObject或者JSONArray对象
1 JSONObject jsonObject = (JSONObject)JSON.toJSON(student);
  • 克隆对象

浅拷贝

1 JSONObject b = new JSONObject(a);

深拷贝

1 JSONObject b = (JSONObject)a.clone(); 

3. Json字符串格式

json字符串中null类型的value如下所示:
1 "{\"header\":{\"code\":34,\"message\":\"job id doesn't exist.\"},\"data\":null}"

boolean,int等类型的value如下所示:

1 "{\"header\":{\"code\":0,\"message\":\"SUCCESS\"},\"data\":{\"id\":48,\"metric.type\":\"kafka_commit\",\"consumer.zk.host\":\"\",\"consumer.zk.port\":2181,\"consumer.zk.root\":\"/brokers\",\"enabled\":true,\"group.id\":\"\"}}"

 

 


 

转载于:https://www.cnblogs.com/lcmichelle/p/10742800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值