json简介
json、xml都是纯文本的数据交换格式,常用于前后端数据交互,
与xml相比,json有以下优点
- 简单易⽤,json的序列化、反序列化都只需一句代码
- 支持性好,⼏乎所有编程语⾔都有解析json的库
- 轻量级,这是json最大的优势。json 比 xml 更小、更快——传输速度更快,更易解析——执行速度更快。
json对象、数组、字符串
JSON全称JavaScript Object Notation,JavaScript 对象表示法,顾名思义是表示对象的
// json对象,key只能是字符串,value可以是各种数据类型(包括数组、对象)
{ "name":"chy" , "age":20 , "score":100 }
// json数组,元素是json对象
[
{ "name":"张三" , "age":20 , "score":100 },
{ "name":"李四" , "age":19 , "score":90 },
{ "name":"王五" , "age":20 , "score":98 }
]
// json字符串
//json对象是对象类型,json数组是数组类型,json字符串就是把json对象、json数组变成字符串形式
'{ "name":"chy" , "age":20 , "score":100 }'
'[
{ "name":"张三" , "age":20 , "score":100 },
{ "name":"李四" , "age":19 , "score":90 },
{ "name":"王五" , "age":20 , "score":98 }
]'
前端 json的序列化、反序列化
json序列化:把json对象、json数组转换为json字符串,进行传输。stringify 字符串化,转换为字符串。
json反序列化:把json字符串转换为json对象、json数组,在前端使用,parse。
// json对象
var user={"name":"chy","age":20};
// json数组
var userList=[
{"name":"zhangsan","age":20},
{"name":"lisi","age":21},
{"name":"wangwu","age":19},
];
// json序列化
var userStr=JSON.stringify(user);
var userListStr=JSON.stringify(userList);
// json反序列化
var jsonObject=JSON.parse(userStr);
var jsonArr=JSON.parse(userListStr);
后端 json数据对应的实体类
@Getter
@Setter
@ToString
public class User implements Serializable {
private Integer id;
private String nickname;
@JsonIgnore
private String password;
private String address;
private String tel;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date create_time;
}
@JsonFormat可以格式化该字段的值
@JsonIgnore可以在json对象中去掉该字段,避免把敏感字段传给前端
后端 对象、json字符串之间的转换
@ResponseBody、@RestController可以自动将对象、数组、集合转换为json对象、数组,但一些时候需要手动转换,比如将HttpClient返回的响应(字符串)转换为json对象、数组。
阿里的fastjson可以实现json字符串、json对象|数组之间的相互转换
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
很多框架都包含了这个依赖,一般不用我们添加
将json字符串转换为实体类
String jsonStr;
User user = JSON.parseObject(jsonStr, User.class);
List<User> userList = JSON.parseArray(jsonStr, User.class);
User user1 = JSONObject.parseObject(jsonStr, User.class);
List<User> userList1 = JSONArray.parseArray(jsonStr, User.class);
将对象、数组、集合转换为json字符串
User user=null;
List<User> userList = null;
String string1 = JSON.toJSONString(user);
String string2 = JSON.toJSONString(userList);
String string3 = JSONObject.toJSONString(user);
String string4 = JSONArray.toJSONString(userList);