工具篇-Json处理
1. @JsonProperty和@SerializedName注解
- 使用场景
- 示例
- @JsonProperty("jsonName")
- private String name;
- private String name;
- 区别
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处理的更多相关文章
- css,js工具篇
4. web前端开发分享-css,js工具篇 web前端开发乃及其它的相关开发,推荐sublime text, webstorm(jetbrains公司系列产品)这两个的原因在于,有个技术叫emm ...
- 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01
百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- 工具篇-MAT(Memory Analyzer Tool)
--- layout: post title: 工具篇-MAT(Memory Analyzer Tool) description: 让内存泄漏无所遁形 2015-10-08 category: bl ...
- 工具篇-TraceView
--- layout: post title: 工具篇-TraceView description: 让我们远离卡顿和黑屏 2015-10-09 category: blog --- ## 让我们远 ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- js之第三方工具解析JSON
1.JSON 仅仅是一种文本字符串.它被存储在 responseText 属性中 为了读取存储在 responseText 属性中的 JSON 数据,须要依据 JavaScript 的 eval 函数 ...
- 大数据工具篇之Hive与MySQL整合完整教程
大数据工具篇之Hive与MySQL整合完整教程 一.引言 Hive元数据存储可以放到RDBMS数据库中,本文以Hive与MySQL数据库的整合为目标,详细说明Hive与MySQL的整合方法. 二.安装 ...
- 大数据工具篇之Hive与HBase整合完整教程
大数据工具篇之Hive与HBase整合完整教程 一.引言 最近的一次培训,用户特意提到Hadoop环境下HDFS中存储的文件如何才能导入到HBase,关于这部分基于HBase Java API的写入方 ...
随机推荐
- Apache Beam WordCount编程实战及源码解读
概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流 ...
- Kotlin入门(29)任务Runnable
任务Runnable定义了一个可以独立运行的代码片段,通常用于界面控件的延迟处理,比如有时为了避免同时占用某种资源造成冲突,有时则是为了反复间隔刷新界面从而产生动画效果.运行一个任务也有多种形式,既可 ...
- eclipse中web项目没有run on server
刷新web项目,项目->右击->Properties->Project Facets,选择Java和Dynamic Web Module.点击Apply and Close,再次运行 ...
- 微信小程序 text属性设置 WXSS样式
>微信小程序的布局css样式 参考自 珺L 文字 width: fit-content;font-size:20px; /*设置文字字号*/color:red; ...
- git 入门教程之个性化 git
前情概要 初识 git 时,我们就已经接触过 git 的基本配置,使用 git config 命令配置用户名和邮箱: # 配置当前项目(`local`)的用户名(`snowdreams1006`) g ...
- Linux16.04 LTS 环境下将cmake的项目转换成eclipse可导入可调试的工程项目
Linux作为一个开源系统,其中的一个优势就是有效的将各种源码编译得到的库集合在一起,为项目的使用创建了便捷.通常情况下,我们在开发自己的开源项目时,喜欢使用cmake调用各种三方库,如opencv ...
- php配置文件php.ini的详细解析(续)
file_uploads = On // ...
- python——函数之装饰器
1 问题 实际生活中,我们很难一次性就把一个函数代码写得完美无缺.当我们需要对以前的函数添加新功能时,我们应该怎么做? 2 问题解决思路 (1)可以直接修改原来的函数,在函数内直接修改.当我们对多个函 ...
- cmd是命令提示符吗?
经常使用电脑的小伙伴对cmd有所了解,它能帮我们快速解决问题.搜索框中输入“cmd”,就可以看到命令提示符程序了.那么,命令提示符程序和cmd到底有着什么样的联系呢?下面就为大家讲解一下. CMD是c ...
- 【算法】LeetCode算法题-Maximum Subarray
这是悦乐书的第154次更新,第156篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第13题(顺位题号是53).给定一个整数数组nums,找出一个最大和,此和是由数组中索引 ...