1. @JsonProperty和@SerializedName注解

  • 使用场景
将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串中的字段跟java对象中定义的属性名不一致,需要在java对象的属性上加上@JsonProperty或@SerializedName进行转换。
  • 示例
 @JsonProperty("jsonName")
private String name;
或者 @SerializedName("jsonName")
 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>

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

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

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

FastJson的一些使用如下所示:

  • Json串转换成JSONObject

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

原始字符串

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

转换过程

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

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

 public class Student {

     private String studentName;
private Integer studentAge; public String getStudentName() {
return studentName;
} public void setStudentName(String studentName) {
this.studentName = studentName;
} public Integer getStudentAge() {
return studentAge;
} public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
}

转换过程

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

或者

 Student student = JSONObject.parseObject(JSON_OBJ_STR, Student.class);
  • JavaBean转换成Json字符串
 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
WriteNullListAsEmpty List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty 字符类型字段如果为null,输出为"",而非null
WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null

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

浅拷贝

 JSONObject b = new JSONObject(a);

深拷贝

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

上边的深拷贝不好使的话,可以考虑下边这个

 private Object deepCopyByJson(Object obj) {
String json = JSON.toJSONString(obj);
return JSON.parseObject(json, Object.class);
}

3. Json字符串格式

json字符串中null类型的value如下所示:

 "{\"header\":{\"code\":34,\"message\":\"job id doesn't exist.\"},\"data\":null}"

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

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

工具篇-Json处理的更多相关文章

  1. css,js工具篇

    4. web前端开发分享-css,js工具篇   web前端开发乃及其它的相关开发,推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emm ...

  2. 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01

    百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...

  3. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  4. 工具篇-MAT(Memory Analyzer Tool)

    --- layout: post title: 工具篇-MAT(Memory Analyzer Tool) description: 让内存泄漏无所遁形 2015-10-08 category: bl ...

  5. 工具篇-TraceView

    --- layout: post title: 工具篇-TraceView  description: 让我们远离卡顿和黑屏 2015-10-09 category: blog --- ## 让我们远 ...

  6. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  7. js之第三方工具解析JSON

    1.JSON 仅仅是一种文本字符串.它被存储在 responseText 属性中 为了读取存储在 responseText 属性中的 JSON 数据,须要依据 JavaScript 的 eval 函数 ...

  8. 大数据工具篇之Hive与MySQL整合完整教程

    大数据工具篇之Hive与MySQL整合完整教程 一.引言 Hive元数据存储可以放到RDBMS数据库中,本文以Hive与MySQL数据库的整合为目标,详细说明Hive与MySQL的整合方法. 二.安装 ...

  9. 大数据工具篇之Hive与HBase整合完整教程

    大数据工具篇之Hive与HBase整合完整教程 一.引言 最近的一次培训,用户特意提到Hadoop环境下HDFS中存储的文件如何才能导入到HBase,关于这部分基于HBase Java API的写入方 ...

随机推荐

  1. 洛谷P4926 [1007]倍杀测量者(差分约束)

    题意 题目链接 Sol 题目中的两个限制条件相当于是 \[A_i \geqslant (K_i - T)B_i\] \[A_i(K_i + T) \geq B_i\] 我们需要让这两个至少有一个不满足 ...

  2. angularJS中控制器和作用范围

    $scope是$rootScope的子作用域控制对象,$rootScope的id为1,其他的为2,3,4... 不同的控制器之间,所对应的作用域控制对象$scope,之间是相互隔离的,如果要共享数据, ...

  3. net core webApi返回值

    1 多个参数采用结构的形式,如class xyz 2 返回值使用IActionResult 控制,不能使用httpRequestMessage类型 3 url为路由名称+Controller前缀 如下 ...

  4. htnl 定位

    相对定位 相对定位:position:relative; 相对定位:相对定位是相对于元素在文档中的初始位置——首先它出现在它所在的位置上(即不设置position时的位置,然后通过设置垂直或水平位置, ...

  5. Android为TV端助力 android 在5.0以后不允许使用隐式Intent方式来启动Service

    android5.0以后不能使用隐式intent :需要指定Intent的ComponentName信息:intent.setComponent(xxx),或指定Intent的setPackage(& ...

  6. 微信小程序 text属性设置 WXSS样式

    >微信小程序的布局css样式 参考自  珺L 文字 width: fit-content;font-size:20px;      /*设置文字字号*/color:red;           ...

  7. java----OO的概念和设计原则(转)

    一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性, 来认识.理解.刻划客观世界和设计.构建相应的软件系统.面向对象的 ...

  8. Navicat Premium 连接oracle ORA-01017:用户名/口令无效;登陆被拒绝

    解决的方法就是将用户名改成system

  9. Linux进程调度器概述--Linux进程的管理与调度(十五)

    调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...

  10. C# json、xml序列化

    json序列化: public static string SerializeJson<T>(T json) { // 1. 需要添加引用 Newtonsoft.Json.dll,默认为 ...