文章目录
JSON介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。JSON采用完全独立于语言的文本格式,很多语言都提供对json的支持(c, c++, c#, java, javascript, Perl, Python等)
json是一种轻量级的数据交换格式。
轻量级:跟xml比较
数据交换:客户端和服务器之间业务数据的传递格式
JSON在Javascript中的使用
json的定义
json是由
键
值
对
\textcolor{red}{键值对}
键值对组成,由
花
括
号
(
大
括
号
)
\textcolor{red}{花括号(大括号)}
花括号(大括号)包围。每个键值对由
引
号
\textcolor{red}{引号}
引号引起来,
键
和
值
之
间
\textcolor{red}{键和值之间}
键和值之间用
冒
号
\textcolor{red}{冒号}
冒号进行隔离,
多
组
键
值
对
之
间
\textcolor{red}{多组键值对之间}
多组键值对之间进行
逗
号
\textcolor{red}{逗号}
逗号分隔
实例:
<html>
<head>
<script type = "text/javascript">
//json的定义
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":trus,
"key4":[11, "abc", false],
"ket5":{
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6":[{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
},{
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
</script>
</head>
<body>
</body>
</html>
json的访问
json本身是一个对象
json中的key可以理解为属性
json中的key访问如同访问对象的属性一样:json对象.key
实例:
<script type = "text/javascript">
//json的定义
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11, "abc", false],
"ket5":{
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6":[{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
},{
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
// alert(typeof(jsonObj)); //Object json就是一个对象
//json的访问
// alert(jsonObj.key1);//12
// alert(jsonObj.key2);//abc
// alert(jsonObj.key3);//true
// alert(jsonObj.key4);//得到数组[11, "abc", false]
//json中数组值的遍历
// for (var i = 0; i < jsonObj.key4.length; i++){
// alert(jsonObj.key4[i]);
// }
// alert(jsonObj.key5.key5_1);//551
// alert(jsonObj.key5.key5_2);//key5_2_value
// alert(jsonObj.key6);//得到json数组
//取出来每一个元素都是json的元素
// var jsonItem = jsonObj.key6[0];
// alert(jsonItem.key6_1_1);//6611
// alert(jsonItem.key6_1_2);//key6_1_2_value
</script>
json的两个常用方法
json的存在形式
有两种:
1.对象的形式存在:json对象
2.字符串的形式存在:json字符串
这两种存在形式可以相互转换,方法如下:
JSON.stringify()
JSON.stringify():把json对象转换为json字符串
JSON.parse()
JSON.parse():把json字符串转换为json对象
使用场景:
1.操作json中的数据时:需要json对象的格式
2.在客户端和服务器之间进行数据交换时:使用json字符串
注意:
JSON.xxx()方法中JSON是大写的
实例:
<script type = "text/javascript">
//json的定义
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11, "abc", false],
"ket5":{
"key5_1" : 551,
"key5_2" : "key5_2_value"
},
"key6":[{
"key6_1_1":6611,
"key6_1_2":"key6_1_2_value"
},{
"key6_2_1":6621,
"key6_2_2":"key6_2_2_value"
}]
};
// alert(typeof(jsonObj)); //Object json就是一个对象
//json的访问
// alert(jsonObj.key1);//12
// alert(jsonObj.key2);//abc
// alert(jsonObj.key3);//true
// alert(jsonObj.key4);//得到数组[11, "abc", false]
//json中数组值的遍历
// for (var i = 0; i < jsonObj.key4.length; i++){
// alert(jsonObj.key4[i]);
// }
// alert(jsonObj.key5.key5_1);//551
// alert(jsonObj.key5.key5_2);//key5_2_value
// alert(jsonObj.key6);//得到json数组
//取出来每一个元素都是json的元素
// var jsonItem = jsonObj.key6[0];
// alert(jsonItem.key6_1_1);//6611
// alert(jsonItem.key6_1_2);//key6_1_2_value
// alert(jsonObj);
//json对象转字符串
var jsonObjString = JSON.stringify(jsonObj);//像java的toString方法
//alert(jsonObjString);
//json字符串转json对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2);
alert(jsonObj2.key1);//12
alert(jsonObj2.key2);//abc
</script>
JSON在Java中的使用
使用json,需要导入jar包:gson-2.2.4.jar
Gson
创建Gson对象实例:
Gson gson = new Gson();
toJson方法可以把java对象转换为json字符串
String personJsonString = gson.toJson(java对象);
Gson中的fromJson:把json字符串转换为java对象
第一个参数为json字符串
第二个参数是转换回去的java对象类型
Gson对象.fromJson(json字符串, 转换回去的java对象类型) //例子 gson.fromJson(personJsonString, Person.class)
方法总结:
1.xxx转换为json:
1)创建Gson对象
Gson Gson对象名 = new Gson();
2)使用Gson的toJson方法
String 字符串名 = Gson对象名.toJson(xxx对象名);
2.json转换为xxx:
使用Gson的fromJson方法
xxx xxx对象名 = Gson对象名.fromJson(json字符串, xxx类型)
注意:
1.若xxx为javaBean时:
xxx xxx对象名 = gson.fromJson(json字符串名, xxx.class);
2.若xxx为List、Map时:
方法1:
1)创建类型转换的类
//List
public class 类名 extends TypeToken<ArrayList<数据类型, 对象类型>> {}
//Map
public class 类名 extends TypeToken<HashMap<数据类型, 对象类型>> {}
2.调用
xxx xxx对象名 = gson.fromJson(json字符串名, new 类名.getType());
方法2:使用匿名内部类
xxx xxx对象名 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<数据类型, 对象类型>>(){}.getType());
JavaBean 和 json 的互转
实例:
package com.atguigu.pojo;
public class Person {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(){
}
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;
public class JsonTest {
// 1.javaBean和json的互转
@Test
public void test1(){
Person person = new Person(1, "国哥");
//创建Gson对象实例
Gson gson = new Gson();
//toJson方法可以把java对象转换为json字符串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
//Gson中的fromJson:把json字符串转换为java对象
//第一个参数为json字符串
//第二个参数是转换回去的java对象类型
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
}
}
List 和 json 的互转
实例:
package com.atguigu.pojo;
public class Person {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(){
}
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
public class PersonListType extends TypeToken<ArrayList<Person>> {
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class JsonTest {
// 2.List和json的互转
@Test
public void test2(){
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "猫猫"));
personList.add(new Person(2, "狗狗"));
//创建Gson对象实例
Gson gson = new Gson();
//把List转换为json字符串
System.out.println("把List转换为njson字符串:");
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
//将json字符串转换为List
System.out.println("将json字符串转换为List:");
List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
}
Map 和 json 的互转
实例:
package com.atguigu.pojo;
public class Person {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(){
}
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
public class PersonMapType extends TypeToken<HashMap<Integer, Person>> {
}
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonTest {
// 3.Map和json的互转
@Test
public void test3(){
Map<Integer, Person> personMap = new HashMap<>();
personMap.put(1, new Person(1, "猫猫"));
personMap.put(2, new Person(2, "狗狗"));
//创建Gson对象实例
Gson gson = new Gson();
//把Map转换为json字符串
System.out.println("把Map转换为json字符串:");
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
//将json字符串转换为Map
System.out.println("将json字符串转换为Map:");
Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());
System.out.println(map);
Person person = map.get(1);
System.out.println(person);
}
}
优化:类型转换,不需要在单独创建类,使用匿名内部类
package com.atguigu.json;
import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonTest {
// 3.Map和json的互转
@Test
public void test3(){
Map<Integer, Person> personMap = new HashMap<>();
personMap.put(1, new Person(1, "猫猫"));
personMap.put(2, new Person(2, "狗狗"));
//创建Gson对象实例
Gson gson = new Gson();
//把Map转换为json字符串
System.out.println("把Map转换为json字符串:");
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
//将json字符串转换为Map
System.out.println("将json字符串转换为Map:");
// Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());
Map<Integer, Person> map = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer, Person>>(){}.getType());
System.out.println(map);
Person person = map.get(1);
System.out.println(person);
}
}