JSON小述
一、JSON是什么
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易与人阅读和编写,同时易于机器解析和生成,json采用完全独立语言的文本格式,而且很多语言都提供了对json的支持(包括c、c++、c#、java、python等),这样就使得json成为理想的数据交换格式。
轻量级指的是跟xml作比较
数据交换指的是客户端和服务器之间业务数据的传递格式
二、JSON在JavaScript中的使用
1、json的定义
json是由键值对组成,并且是由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分割,多组键值对之间使用逗号进行分割
var jsonObj = {
"key1" : 12,
"key2" : "abc",
"key3" : true,
"key4" : [11,"arr",false],
"key5" : {
"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"
}]
}
2、json的访问
json本身是一个对象
json中的key我们可以理解为是对象中的一个属性
json中的key访问就跟访问对象的属性一样:json对象.key
// json的访问
//alert(jsonObj.key1)
//alert(jsonObj.key2)
//alert(jsonObj.key3)
//alert(jsonObj.key4)//得到数组[11,arr,false]
// json中数组值的遍历
/*for (var i = 0;i < jsonObj.key4.length;i++){
alert(jsonObj.key4[i])//11,arr,false
}*/
//alert(jsonObj.key5.key5_1)//551
//alert(jsonObj.key5.key5_2)//key5_2_value
// alert(jsonObj.key6)
//alert(jsonObj.key6[1].key6_2_1)//6621
alert(jsonObj.key6[1].key6_2_2)//key6_2_2_value
3、JSON的两个常用方法
json的存在有两种形式:
-
一种是对象的形式存在,我们叫它json对象
-
一种是字符串的形式存在,我们叫它json字符串
-
一般我们要操作json中的数据的时候,需要json对象的格式
-
一般我们要在客户端和服务器之间进行数据交换的时候,使用json字符串
JSON.stringify() 把json对象转换成为json字符串
JSON.parse() 把json字符串转换成为json对象
//json对象转字符串
//alert(jsonObj);
var jsonObjString = JSON.stringify(jsonObj)//转换结果特别像java中对象的toString
//alert(jsonObjString)
// json字符串转json对象
var jsonObj2 = JSON.parse(jsonObjString)
//alert(jsonObj2)
alert(jsonObj2.key1)//12
json对象转json字符串结果:
{"key1":12,"key2":"abc","key3":true,"key4":[11,"arr",false],"key5":{"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"}]}
json字符串转json对象结果:
[object Object]
三、JSON在java中的使用
先导入需要的jar包
gson-2.2.4.jar junit-4.12.jar gson-2.2.4.jar
1、javabean和json的互转
先创建一个javabean对象
package com.zjj.pojo;
public class Person {
private Integer id;
private String name;
public Person() {
}
public Person(Integer id, String name) {
this.id = id;
this.name = 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;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
实现互转
package com.zjj.json;
import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;
public class JsonTest {
//javabean和json的互转
@Test
public void test1(){
Person person = new Person(1, "zhangsan");
//创建gson对象实例
Gson gson = new Gson();
//toJson方法可以把java对象转换成为Json字符串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
//fromJson把json字符串转换回java对象
//第一个参数是json字符串
//第二个参数是转换回去的java对象类型
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
}
}
结果:
{"id":1,"name":"zhangsan"}
Person
2、list和json的互转
写一个类继承gson-2.2.4.jar包的typeToken类(需要接收一个泛型,转换回去的具体类型)
package com.zjj.json;
import com.google.gson.reflect.TypeToken;
import com.zjj.pojo.Person;
import java.util.ArrayList;
public class PersonListType extends TypeToken<ArrayList<Person>> {
}
json字符串转换回集合必须使用Type类型
package com.zjj.json;
import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;
public class JsonTest {
//list和json的互转
@Test
public void test2() {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person(1, "zhangsan"));
personList.add(new Person(2, "wangwu"));
Gson gson = new Gson();
//把list转换为json字符串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
//List list = gson.fromJson(personListJsonString, personList.getClass());
//System.out.println(list);
//报错:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.zjj.pojo.Person
//Person person = (Person) list.get(0);
//System.out.println(person);
List list = gson.fromJson(personListJsonString, new PersonListType().getType());
System.out.println(list);
Person person = (Person) list.get(0);
System.out.println(person);
}
}
输出:
[{"id":1,"name":"zhangsan"},{"id":2,"name":"wangwu"}]
[Person{id=1, name='zhangsan'}, Person{id=2, name='wangwu'}]
Person
3、map和json的互转
package com.zjj.json;
import com.google.gson.Gson;
import com.zjj.pojo.Person;
import org.junit.Test;
public class JsonTest {
@Test
public void test3() {
Map<Integer,Person> personMap = new HashMap<Integer,Person>();
personMap.put(1, new Person(1, "zhangsan"));
personMap.put(2, new Person(2, "wangwu"));
Gson gson = new Gson();
//把Map集合转换为json字符串
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new PersonListType().getType());
System.out.println(personMap2);
}
}
结果:
{"1":{"id":1,"name":"zhangsan"},"2":{"id":2,"name":"wangwu"}}
注意
- json字符串转换回javabean对象使用class类型就可以了
- json字符串转换回集合必须使用Type类型
gson对象.fromJson()方法的参数:


浙公网安备 33010602011771号