JSON:JavaScript 对象表示法(JavaScript Object Notation), 一种轻量级的数据交换格式, 易于人阅读和编写, 也易于机器解析和生成。用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于服务端与客户端的数据交互。
JSON 是存储和交换文本信息的语法,类似 XML。
类型:基本类型 数组类型 对象嵌套
3. JSON 格式
- 两种构建结构
a) 、对象:“ 名称/ 值” 对的集合(A collection of name/value pairs)不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典 (dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。
b) 、数组: 值的有序列表(An ordered list of values)在大多数语言中,它被理解为数组(array)、矢量(vector), 列表(list)或者序列
(sequence)。经过对象、数组 2 种结构就可以组合成复杂的数据结构了。 - 具体形式
Json 以 key-value 的形式存储数据
Key 的取值 为 String 类型;
Value 的取值 为 String,boolean,Number,数组,Object,null;
Json 串以{开始,以}结尾;
Json 串中数组是以[开始,以]结尾;
Json 串中 Object 是以{开始,以}结尾;
a)、对象是一个无序的“名称/值”对集合。一个对象以”{”开始,“}”结束。每个名称后跟一个“:”;“名称/值 ”对之间使用“,”分隔。
b)、数组是值的有序集合。一个数组以“[”开始,“]”结束。各值间使用“,”分隔。
c)、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、 对象(object)或者数组(array)。这些结构可以嵌套。
d)、字符串(string)是由 0 到多个 Unicode 字符组成的序列,封装在双引号中, 可 以使用反斜杠’\’进行转义。一个字符可以表示为一个单一字符的字符串
e)、数字(number)类似 C 或者 Java 里面的数,没有用到的 8 进制和 16 进制数除外。
一、 解析方式
- 使用 gson 处理
Gson是一个Google提供的一个Java库,可用于将Java对象转换为JSON表示。它也可以被用来将 JSON 字符串转换成一个等效的 Java 对象。提供易于使用的机制如 toString()和构造函数(工厂方法)将 Java 转换为 JSON,反之亦然。允许自定义表示对象,支持任意复杂的对象,生成紧凑和可读性的
JSON 输出
- 转为 Json 字符串
Gson gson = new Gson();
//将 对象 转化成 json 字符串
String json = gson.toJson(obj) - 解析成 java 对象
I) 、Gson 的 节点对象:
JsonElement : 所有的节点 都是 JsonElement 对象.
JsonPrimitive : 基本的 数据类型的 节点 对象, JsonElement 的子类.
JsonNull : 代表 空节点 对象,即 有 key,value 为空,JsonElement 的子类.
JsonObject : 对象 数据类型的 节点 对象, JsonElement 的 子类.
JsonArray : 数组 数据类型的 节点 对象, JsonElement 的 子类.
II) 、JsonElement 的取值:
JsonPrimitive : value 的 取值对应 java 的
int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigI nteger,Number
JsonObject : value 的取值对应 java 的 Object 对象.
JsonArray : value 的取值对应 java 的 List 及其子类对象.
III) 、解析对象
Json 解析成 java 对象
{“name”:”张三”,”age”:18,”sex”:true}
Gson gson = new Gson();
// 将 json 转化成 java 对象
Student stu = gson.fromJson(json, Student.class);
Json 解析 成 List
Gson gson = new Gson();
// 将 json 转化 成 List 泛型
List stus = gson.fromJson(json, new TypeToken<List>(){}.getType());
Json 解析 成 map
Gson gson = new Gson();
// 将 json 转化成 Map 泛型了 TypeToken,它是 gson 提供的数据类型转换器
Map<String,Student> map = gson.fromJson(json, newTypeToken<Map<String,Student>>(){}.getType());
Json 节点解析
解析步骤 :
①获得解析器
JsonParser parser = new JsonParser();
②获得根节点元素
JsonElement element = parser.parse(json);
③根据文档判断根节点属于什么类型的 Gson 节点对象
// 假如文档 显示 根节点 为对象类型
// 获得 根节点 的实际 节点类型
JsonObject root = element.getAsJsonObject();
④取得节点下的某个节点的 value
// 获得 flag 节点的值, flag 节点为基本数据节点
JsonPrimitive flagJson = root.getAsJsonPrimitive(“flag”);
// 基本节点取值
boolean flag = flagJson.getAsBoolean();
// 获得 data 节点的值,data 节点为 Object 数据节点
JsonObject dataJson = root.getAsJsonObject(“data”);
// 将节点上的数据转换为对象
Student stu = new Gson().fromJson(dataJson,Student.class);
- 使用 fastjson 处理
阿里巴巴 fastJson 是一个 Json 处理工具包,包括“序列化”和“反序列化”两
部分,它 具备如下特征:速度最快,测试表明,fastjson 具有极快的性能,超
越其他的 Java Json parser。包括自称最快的 JackJson;功能强大,完全支持 Java
Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖。
下载路径:https://github.com/alibaba/fastjson/releases/tag/1.2.13
- 转为 json 字符串
String jsonString = JSON.toJSONString(object); - 解析成对象
1). JavaBean : Person person = JSON.parseObject(jsonString, Person.class);
2). List : List listPerson =JSON.parseArray(jsonString, Person.class);
3). List:List listString = JSON.parseArray(jsonString, String.class);
4). List