开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
什么是json?(摘自百度百科) JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
先随便建一个类Person.java:
package demo01.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;
}
}
在JsonTest.java中实现类型的相互转换(记得导jar包(我使用的是gson-2.2.4.jar)):
1、JavaBean和Json的相互转换:
使用toJson()方法转换成json字符串,使用fromJson()方法转换回来
/**
* 1.javaBean和json的互转
*/
@Test
public void test1(){
Person person = new Person(1, "哈哈哈");
Gson gson = new Gson();
//toJson()方法可以把java对象转换成为json字符串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
//fromJson()把json字符串转换为java对象
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
}
2、 List类型和Json的相互转换
这里采用的方法是写一个PersonListType.java类去继承TypeToken,使用它的getType()方法获取类型作为fromJson的第二个参数(也可采用匿名内部类的方法)
PersonListType.java:
package demo01.json;
import com.google.gson.reflect.TypeToken;
import demo01.pojo.Person;
import java.util.ArrayList;
/**
* 在JsonTest.java中,用做将json字符串转换成list
*/
public class PersonListType extends TypeToken<ArrayList<Person>> {
}
/**
* 2.list和json的互转
*/
@Test
public void test2(){
List<Person> personList=new ArrayList<>();
personList.add(new Person(1,"哈哈哈"));
personList.add(new Person(2,"嘿嘿嘿"));
Gson gson = new Gson();
//把列表转换为json字符串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
List<Person>list = gson.fromJson(personListJsonString,new PersonListType().getType());
System.out.println(list);
}
3、Map类型和Json的相互转换
原理和List基本相同,这里使用匿名内部类的方法,就不用再另写一个类了
/***
* 3.map和json的互转
*/
public void test3(){
Map<Integer,Person> personMap = new HashMap<>();
personMap.put(1,new Person(1,"哈哈哈"));
personMap.put(2,new Person(2,"嘿嘿嘿"));
Gson gson = new Gson();
//把map集合转换成为json字符串
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
//把json字符串转换成为map集合
// Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString,new PersonMapType().getType());
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString,new TypeToken<HashMap<Integer,Person>>(){}.getType());
System.out.println(personMap2);
}