什么是JSON

json是一种轻量级的数据交换格式,易于人的阅读和编写,也易于机器的解析和生成。很多语言包括C、C++、Java、JS、Python等都提供了对json的支持,这使得json成为理想的数据交换格式

轻量级是指与xml对比,数据交换是指客户端和服务器端之间业务数据的传递格式


JSON的定义和访问

定义:json由键值对组成,并由花括号包围;每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间使用逗号进行分隔

json.html

20-JSON_json

json中的key可以理解为对象的属性

20-JSON_java_02


JSON在JavaScript中两种常用的转换方法

json数据有两种存在形式,一种是json对象,一种是json字符串。JSON.stringify()将json对象转换为json字符串,JSON.parse()将json字符串转换为json对象。当要操作json中的数据时需要用json对象,当要在客户端和服务器端进行数据传递时需要用json字符串

20-JSON_java_03


JavaBean和json的相互转换

在服务器端使用json,需要先导入相应的包,add as library

20-JSON_java_04

package com.atguigu.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.atguigu.json;

import com.atguigu.pojo.Person;
import com.google.gson.Gson;
import org.junit.Test;

public class JsonTest {

@Test
public void test1() {
Person person = new Person(1, "刘德华");
Gson gson = new Gson();
String personJsonString = gson.toJson(person);
System.out.println(personJsonString); // {"id":1,"name":"刘德华"}

Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1); // Person{id=1, name='刘德华'}
}
}

List集合和json的相互转换

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>> {
// TypeToken类是gson提供的专门用来处理json转List的,需要写一个类来继承它,这里什么都不用做,
// 给它传入的泛型是要转换的List,可以是List<Person>,也可以是具体的ArrayList<Person>
}

20-JSON_json字符串_05

Map集合和json的相互转换

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>> {
// 传入的泛型既可以是Map<Integer, Person>,也可以是HashMap<Integer, Person>
}

20-JSON_json_06

一种更简洁的方式是使用匿名内部类

// Map<Integer, Person> personMap1 = gson.fromJson(personMapJsonString, new PersonMapType().getType());
Map<Integer, Person> personMap1 = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer, Person>>(){}.getType());