JSON
1.JSON概述
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
- 它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集,它利用了JavaScript的一些模式来表示结构化数据。
- 它是一种数据格式,而非编程语言
- Json并不从属于JavaScript。很多编程语言都有针对Json的解析器
2.JSON使用
2.1 JS声明对象
Java语言:
JS语言:
2.2 对象中包含对象
Java语言:
JS语言:
2.3 对象里包含数组或集合
Java语言:
JS语言:
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var person = {name:"zsss", age:20};
console.log(person.name)
console.log(person.age)
var person2 = {name:"sss", age:22,info:{address:"武汉",email:"222@qq.com"}}
console.log(person2.info.address)
var country = {name:"中国", province:[{name:"黑龙江", cities:["哈尔滨","大庆"]},
{name:"湖北省", citise:["武汉","荆州"]},
{name:"台湾省", cities:["台北", "高雄"]}]}
console.log(country.province[2].cities[0])
console.log(country.province[0].cities[0])
</script>
</head>
<body>
</body>
</html>
2.4 JSON数据格式VS XML数据格式
json字符串,可以认为是java中的toString:
var pro ={
"name":"中国",
"province":[{"name":"黑龙江",”cities”:["哈尔滨","大庆"]},
{"name":"广东","cities":["广州","深圳","珠海"]},
{"name":"台湾","cities":["台北","高雄"]},
{"name":"新疆","cities":["乌鲁木齐"]}
]
}
alert(pro.province[0].cities.city[1]);
XML格式:
<?xml version="1.0"encoding="utf-8"?>
<country>
<name>中国</name>
<province>
<name>黑龙江</name>
<cities>
<city>哈尔滨</city>
<city>大庆</city>
</cities>
</province>
<province>
<name>广东</name>
<cities>
<city>广州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>台湾</name>
<cities>
<city>台北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>乌鲁木齐</city>
</cities>
</province>
</country>
2.5 数据格式比较
2.5.1 可读性
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
2.5.2 可扩展性
- XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。
- 解码难度:XML的解析方式有两种:一是通过文档模型解析。另外一种方法是遍历节点;但对于JSON,如果事先知道结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码
- 数据效率:JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力
3.Java语言操纵JSON
3.1 其他类型数据生成json字符串
String json = "{\"id\":\"" + user.getName() + "\",\"id\":\"" + user.getPassword() + "\"}";
较复杂
JSON在线工具:
https://www.bejson.com/
JSON转Java实体类:
3.2 Jackson可实现Java对象和JSON字符串互换
3.2.1 工具类,可实现java对象和json字符串的相互转换。
gson—google
fastjson----alibaba
1.在Maven中导包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cskaoyan.28ee</groupId>
<artifactId>json</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.创建Javabean对象
加上set、get、tostring
public class User {
private String usename;
private String password;
}
3.写测试类
Java实体类转json,法一:(传统方法)
@Test
public void testObjectToJsonStr(){
User user = new User();
user.setUsename("admin");
user.setPassword("1234");
//将该user对象转成json字符串
//js其实非常喜欢json字符串形式地数据
//很轻松的将json字符串转成对应的json对象 vue 双向绑定
// var user = {"username":"admin","password":"1234"}
String jsonStr = "{\"username\":\"" + user.getUsename() + "\",\"password\":\"" + user.getPassword() + "\"}";
System.out.println(jsonStr);
Java实体类转json,法二:(工具类)
@Test
public void testObjectToJsonStr3() throws JsonProcessingException {
User user = new User();
user.setUsename("admin");
user.setPassword("1234");
User user2 = new User();
user2.setUsename("admin");
user2.setPassword("1234");
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user2);
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(users);
System.out.println(s);
}
json转Java实体类:法一(传统)
@Test
public void testJsonStrToObject() throws JsonProcessingException {
String userStr ="{\"usename\":\"admin\",\"password\":\"1234\"}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(userStr, User.class);
System.out.println(user);
}
json转Java实体类:法二(带有集合形式的json字符串,将其转成List形式)
@Test
public void testJsonStrToObject2() throws JsonProcessingException {
String userStr = "[{\"usename\":\"admin\",\"password\":\"1234\"},{\"usename\":\"admin\",\"password\":\"1234\"}]";
ObjectMapper mapper = new ObjectMapper();
//如果处理这种带有集合形式的json字符串,将其转成List<Object>形式
//可以使用另外一个对象来协助完成
//创建一个类型工厂
TypeFactory typeFactory = mapper.getTypeFactory();
//创建结构集合类型
CollectionType collectionType = typeFactory.constructCollectionType(List.class, User.class);
List<User> o = mapper.readValue(userStr, collectionType);
for (User user : o) {
System.out.println(user);
}
}