JSON是什么?
json是一种轻量化数据交换格式,易于人的阅读和编写
json采用完全独立于语言的一种格式,而且很多语言都提供了对json的支持,这使得它能够成为理想的数据交互格式
json是一种轻量级的数据交互格式
轻量级是与xml作比较
json的格式: 由键值对组成,用花括号包围,键是由双引号包裹,键与值之间由冒号分隔,多组键值对之间是由逗号进行分隔
JSON在JavaScript中的使用
JSON的定义与访问
// json的定义
var jsonObj = {
//Number型
"key1" : 12,
//String型
"key2" : "abc",
//Boolean型
"key3" : true,
//数组型
"key4" : [123,'abc',true],
//json
"key5" : {
"key5_1" : "value5_1",
"key5_2" : "value5_2"
},
//json数组
"key6" : [{
"key6_1_1" : "value6_1_1",
"key6_1_2" : "value6_1_2"
},{
"key6_2_1" : "value6_2_1",
"key6_2_2" : "value6_2_2"
}]
}
// json访问普通的值
alert(jsonObj.key1);//12
alert(jsonObj.key2);//abc
alert(jsonObj.key3);//true
//json访问的值是数组
alert(jsonObj.key4)//123,abc,true
//遍历json中的数组,与普通数组变量一样
for (let i = 0; i < jsonObj.key4.length; i++) {
alert(jsonObj.key4[i]);
}
//json中获取值为json 变量1.key1.key2,返货key2的值
alert(jsonObj.key5.key5_1);
//json中获取值json数组的值 变量1.key1[index].key2,返货key2的值
alert(jsonObj.key6[0].key6_1_1);
//遍历json中的json数组的值
for (let i = 0; i < jsonObj.key6.length; i++) {
alert(jsonObj.key6[i])
}
JSON的两种存在形式
JSON有两种形式存在,它们直接能够相互转换
一种是对象的形式: json对象
一种是字符串的形式: json字符串
在JavaScript中它们转换方法
json对象转json字符串方法: JSON.stringify();
json字符串转json对象方法: JSON.parse();
// json对象转字符串
var jsonStr = JSON.stringify(jsonObj);
alert(jsonStr);
/*
{
"key1":12,
"key2":"abc",
"key3":true,
"key4":[123,
"abc",true],
"key5":{"key5_1":"value5_1","key5_2":"value5_2"},
"key6":[{"key6_1_1":"value6_1_1","key6_1_2":"value6_1_2"},
{"key6_2_1":"value6_2_1","key6_2_2":"value6_2_2"}]
}
*/
// json字符串转json对象
jsonObj = JSON.parse(jsonStr);
alert(jsonObj); // [object Object]
JavaBean与JSON之间的转换
我们这里要用到gson的jar包,将gson-2.2.4.jar
包导入lib目录
public class JsonTest {
/**
* JavaBean与son字符串的相互转换
*/
@Test
public void test1(){
//创建Gson的实例化对象
Gson gson = new Gson();
//JavaBean转换为Json字符串
String personToJsonStr = gson.toJson(new Person(2, "Morty"));
System.out.println(personToJsonStr); //我们得到一个标准的Json字符串: {"id":2,"name":"Morty"}
//Json字符串转换为JavaBean
Person person = gson.fromJson(personToJsonStr, Person.class); //两个参数分别为: Json字符串、Bean类
System.out.println(person); //得到person对象的toString: Person{id=2, name='Morty'}
}
/**
* List集合转换为Json字符串
*/
@Test
public void test2(){
//我们创建一个List集合,泛型为Person对象,并存储2个元素
List<Person> listPer = new ArrayList<>();
listPer.add(new Person(3,"Rick"));
listPer.add(new Person(4,"Andy"));
//创建Gson的实例化对象
Gson gson = new Gson();
//List集合转换为Json字符串
String listToJsonStr = gson.toJson(listPer);
System.out.println(listToJsonStr); //得到Json字符串: [{"id":3,"name":"Rick"},{"id":4,"name":"Andy"}]
//Json字符串转换为List集合
//new TypeToken<List<Person>>(){}.getType() 是对List与Map集合的泛型获取
List<Person> list = gson.fromJson(listToJsonStr,new TypeToken<List<Person>>(){}.getType());
System.out.println(list); //得到List集合: [Person{id=3, name='Rick'}, Person{id=4, name='Andy'}]
}
/**
* Map集合转换为Json字符串
*/
@Test
public void test3(){
//我们创建一个Map集合,并存储2个元素
Map<Integer,String> map = new HashMap<>(2);
map.put(111,"Jerry");
map.put(222,"Beth");
//创建Gson的实例化对象
Gson gson = new Gson();
String mapToJsonStr = gson.toJson(map);
System.out.println(mapToJsonStr); //得到Json字符串: {"222":"Beth","111":"Jerry"}
Map<Integer,String> jsonToMap = gson.fromJson(mapToJsonStr, new TypeToken<Map<Integer, String>>(){}.getType());
System.out.println(jsonToMap); //得到Map集合: {"222":"Beth","111":"Jerry"} {222=Beth, 111=Jerry}
}
}