目录
什么是JSON
JSON是一种轻量级的数据交换格式。易于人阅读何编写。同时也易于机器解析何生成,JSON采用完全独异于语言的文本格式,多种语言都提供对json的支持
json是一种轻量级的数据交换格式
轻量是跟xml比较
数据交换指的是客户端跟服务器之间的业务数据的传递格式
JSON在JavaScript中的使用
json的定义
json是由键值对组成,并且由大括号包围,每个键由引号引起来,建和值之间可以用冒号进行分割,
多组键值对之间用逗号进行分割
// json的定义
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11,"arr",false],
"key5":{
"key5_1":551,
"key5_2":"ket5_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"
}]
};
json的访问
json本身是一个对象
json中的key可以理解成对象中的一个属性
json中的key访问跟访问对象属性一样,json对象.key
// json的访问
alert(jsonObj.key1);
alert(jsonObj.key2)
alert(jsonObj.key3)
alert(jsonObj.key4)
for (var i = 0;i<jsonObj.key4.length;i++){
alert(jsonObj.key4[i]);
}
alert(jsonObj.key5.key5_1)
alert(jsonObj.key5.key5_2)
alert(jsonObj.key6)
for (var i = 0;i<jsonObj.key6.length;i++){
alert(jsonObj.key6[i]);
}
json的两个常用方法
json的存在有两种形式。
一种是,对象的形式存在,我们叫它json对象
一种是,字符串的形式存在,我们叫它json字符串
一般我们要操作json中的数据的时候,需要用json对象的格式
一般我们要在客户端和服务器之间进行数据交换的时候使用json字符串
JSON.stringify() 把json对象转化为json字符串
JSON.parse() 把json字符串转化为json字符串
在Java中json的转换
gson.toJson(对象名);//把java对象转化为json字符串
gson.fromJson(json字符串名, class/type);//把json字符串转换为Java对象
javaBean和Json的转换
在JavaBean与Json的转化中,直接调用toJson可将对象转化为json字符串
将json转化为JavaBean时,直接调用fromJson方法
//javaBean和Json的转换
@Test
public void test1(){
Person person = new Person(1,"qw");
//创建Gson对象实例
Gson gson = new Gson();
String personjsonString = gson.toJson(person);//把java对象转化为json字符串
System.out.println(personjsonString);
Person person1 = gson.fromJson(personjsonString, Person.class);//把json字符串转换为Java对象
}
list和json的转换
list转化为json时与JavaBean相同
将json转化为list时调用fromJson(json字符串名,type)
type的创建需声明一个类并继承TypeToken类此类具有泛型,泛型即为要转化的类型,这个类只用继承即可
public class PersonListType extends TypeToken<ArrayList<Person>> {
}
或者可以使用匿名内部类的方法
List<Person> list = gson.fromJson(personListJsonString, new TypeToken<ArrayList<Person>>(){}.getType());
在获得type时new此类对象并调用getType方法即可
//list和json的转换
@Test
public void test2(){
List<Person> personList = new ArrayList<>();
personList.add(new Person(1,"小明"));
personList.add(new Person(2,"小红"));
personList.add(new Person(3,"小李"));
Gson gson = new Gson();
String personListJsonString = gson.toJson(personList);
// System.out.println(personListJsonString);
List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
//System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
Map集合和json的转换
与list的转化相同,代码如下
public class PersonMapType extends TypeToken<HashMap<Integer,Person>> {
}
也可以使用匿名内部类
Map<Integer,Person> personMap1 = gson.fromJson(personJsonMap, new TypeToken<HashMap<Integer,Person>>(){}.getType());
public void test3(){
Map<Integer,Person> personMap = new HashMap<>();
personMap.put(1,new Person(1,"小明"));
personMap.put(2,new Person(2,"小红"));
personMap.put(3,new Person(3,"小李"));
Gson gson = new Gson();
//把map转化为json字符串
String personJsonMap = gson.toJson(personMap);
//System.out.println(personJsonMap);
//把json转化为map
Map<Integer,Person> personMap1 = gson.fromJson(personJsonMap, new PersonMapType().getType());
System.out.println(personMap1);
}