一、认识 json
1. 什么是 json?
JSON (JavaScript Object Notation, JS 对象标记) 是一种
轻量级的数据交换格式
,用完全独立于编程语言的文本格式来
存储和传输数据
。(可以用于代替XML)
2. 为什么数据交换采用 json格式?
简洁和清晰的层次结构
易于阅读和编写
易于机器解析和生成
能有效地提升网络传输效率
3. json 对象的三种数据定义格式
语法如下:
属性与值之间用冒号 : 隔开,属性与属性之间用逗号 , 隔开
json 串在 js 中会解析成对象
。对象名称必须用单引号或者双引号包裹起来。value如果是字符串或者时间日期,也必须用引号引起来
4. json 对象的解析语法
从数组里取数据,使用索引
[索引]
从对象里取数据,使用
.name
万变不离其宗,再复杂的 json 对象都可以通过两种解析语法得到对象中的 value 值,只不过取值次数多几次而已
5. json 中的几种数据类型
number:和 JavaScript 的
number
完全一致
boolean:就是 JavaScript 的
true
或
false
string:就是 JavaScript 的
string
null:就是 JavaScript 的
null
array:就是 JavaScript 的
Array
表示方式——
[]
object:就是 JavaScript 的
{ ... }
表示方式
6. json 对象与 json 字符串
json对象:如果 js 对象的
数据存储格式符合上述 json 对象的定义语法
,则称该 js 对象为 json对象
json字符串:
json 对象的字符串表示法
,简单地说,就是将 json 对象用引号引起来,使用文本表示一个 js 对象的信息
json对象才可以通过两种解析语法进行取值,而转换成json字符串后则不可以直接取值
二、json转换工具的使用
1. 什么时候用转换工具?
在项目过程中,如果出现以下场景:
查询
MySQL
等关系型数据库或者
Redis
缓存数据库时,数据库字段中存储的是 json 字符串格式的数据
需要将 javabean 序列化为字符串保存到数据库表的字段中
所以,将 json 字符串转换为 java 对象或者将 java 对象转换为 json 字符串是非常有必要的。
2. json串与json对象的转换(后端)
2.1 常见的 json 转换工具
json的转换工具是通过java编写并封装好的一些jar工具包,实现java对象或集合与json格式字符串的互换。
2.2 fastjson工具的使用
fastjson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持
将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean
。
maven项目中导入jar包依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
2.2.1 序列化(java对象转字符串)
* @param object 任意java对象
* @return json字符串
public static String toJSONString(Object object) {}
调用方法:JSON.toJSONString(obj)
2.2.2 反序列化(字符串转java对象)
* 字符串转列表List
* @param text json字符串
* @param clazz 指定转换的包装类型
* @param <T> List泛型,即指定的包装类型
* @return
public static <T> List<T> parseArray(String text, Class<T> clazz) {}
* 字符串转map
* @param text json字符串
* @param clazz 转换成的存储类型:Map.class
* @param <T> 存储类型
* @return
//以下两种方式都可以将json串转换成对应的map集合
public static <T> T parseObject(String text, Class<T> clazz) {}
public static JSONObject parseObject(String text) {}
调用:JSON.parseArray("", Animal.class)
,JSON.parseObject("", Map.class)
,JSON.parseObject("")
了解更多:具体案例
如果非 json 格式的字符串通过转换工具来进行转换时,就会抛出异常
JSONObject是Map接口的实现类,所以当返回值为JSONObject时,可以直接用Map对象进行接收
3. json串与json对象的转换(前端)
JavaScript 内置了 JSON 的解析,支持任何 JavaScript 对象序列化成一个JSON格式的字符串,一个JSON格式的字符串反序列化成一个 JavaScript 对象(json 对象可以直接在 javascript 中使用,通过解析语法取值)
3.1 序列化
JSON.stringify(obj)
3.2 反序列化
JSON.parse(string)
eval('(' + jsonStr + ')')
eval() 使用注意:
json字符外包裹一对小括号
eval() 函数也可以将字符串转为json对象,但不推荐,因为这种方式不安全,eval会执行json串中的表达式
三、参考链接
Quick Start CN · alibaba/fastjson Wiki · GitHub
JSON - 廖雪峰的官方网站
Fastjson API中文版_w3cschool
Notepad++中安装json格式化插件
JSON Editor Online