在标准的 json 格式中,json 对象由大括号括起来,json 是由键值对组成,每个键由双引号引起来,键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔。
格式:
var 变量名 = {
"key" : value , // Number 类型
"key2" : "value" , // 字符串类型
"key3" : [] , // 数组类型
"key4" : {} , // json 对象类型
"key5" : [{},{}] // json 数组
};
案例:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script type="text/javascript">
// json的定义
var jsonObj = {
"key1":12,
"key2":"abc",
"key3":true,
"key4":[11,"abcd",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"
}]
};
script>
head>
<body>
body>
html>
案例:
接上面
alert(typeof(jsonObj));// object json 就是一个对象
alert(jsonObj.key1); //12
alert(jsonObj.key2); // abc
alert(jsonObj.key3); // true
alert(jsonObj.key4);// 得到数组[11,"abcd",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
JSON.stringify( json )
把 json 对象转换成为 json 字符串JSON.parse( jsonString )
把 json 字符串转换成为 json 对象案例:
接上面
// 把json对象转换成为 json字符串
var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java对象中的 toString方法
alert(jsonObjString);
// 把json字符串。转换成为json对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2.key1);// 12
alert(jsonObj2.key2);// abc
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库:
本文采用Gson,可以去Maven仓库下载 gson.jar,并复制进web工程里,然后Add as library
Person类:
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 + '\'' +
'}';
}
}
测试类:
import com.fox.bean.Person;
import com.google.gson.Gson;
public class JsonTest {
public static void main(String[] args) {
Person person = new Person(1, "小明");
// 创建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);
}
}
fromJson(String s,Class classOfT)
fromJson(String s,Type typeOfT)
在我们导入的gson.jar包中给我们提供了一个TypeToken类(TypeToken 是google提供的一个解析Json数据的类库中一个类)
案例:
创建一个TypeToken的子类:
import com.fox.bean.Person;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
public class PersonListType extends TypeToken<ArrayList<Person>> {//需要获取类型的泛型类作为TypeToken的泛型参数
}
测试类:
import com.fox.bean.Person;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
public class JsonTest {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "小明"));
personList.add(new Person(2, "小红"));
// 创建Gson对象实例
Gson gson = new Gson();
// 把List转换为json字符串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
// fromJson把json字符串转换回List
List<Person> list = gson.fromJson(personListJsonString,new PersonListType().getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
}
import com.fox.bean.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
public class JsonTest {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "小明"));
personList.add(new Person(2, "小红"));
// 创建Gson对象实例
Gson gson = new Gson();
// 把List转换为json字符串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
// fromJson把json字符串转换回List
List<Person> list = gson.fromJson(personListJsonString, new TypeToken<List<Person>>() {}.getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
}
与List和json互转类似。
案例:
import com.fox.bean.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.Map;
public class JsonTest {
public static void main(String[] args) {
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字符串
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
// fromJson把json字符串转换回Map集合
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());
System.out.println(personMap2);
Person p = personMap2.get(1);
System.out.println(p);
}
}