用Java处理JSON 一
JSON是什么
网上看了一篇不错的文章数据类型和Json格式,里面引用了yaml
的文档,对数据的结构类型做了归纳:
- 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如”北京”这个单独的词
- 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如”北京, 上海”
- 第三种类型是映射(mapping),也就是一个名/值对(name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary), 比如”首都:北京”
刚好最近又一次做到JSON格式日志的解析,就把关于JSON的知识整理一下
JSON官网上对JSON的结构做了介绍,概括起来,就是对象和数组两种形式:
- 对象用大括号
"{}"
表示,对象就是所谓的映射 - 数组用方括号
"[]"
表示,数组就是所谓的序列 - 在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了
用Java处理JSON
Java上被推荐的用来处理JSON格式数据的第三方库有gson
和jackson
,因为之前用gson
用的稍微多一点,所以在库的选型上又一次偏向于gson(2.8.0)
gson
库最原始的用法,就是根据JSON的两种数据类型(对象和数组),利用JsonObject类和JsonArray类手动处理数据中的每个元素:
- JsonObject可以通过
get("key").getAsXXX()
获得相应类型的值, 通过addProperty("key", $value)
设置相应元素的值 - JsonArray可以通过
get(index).getAsXXX()
获得相应类型的值, 通过add($value)
设置相应数组的一个值 - 遇到JSON嵌套格式, 可以通过
getAsJsonObject()
或getAsJsonArray()
转换成子JSON对象或子JSON数组进行处理
其他重要代码:
/* 将一条完整的信息(String)转化成JSON对象 */
JsonObject jsonObject = new JsonParser().parse(messages).getAsJsonObject();
/* 将JSON对象转换成输出信息(String) */
new Gson().toJson(jsonObject);