什么是JSON?
JSON(JavaScript Object Notation【表示法,符号】)是一种轻量级的数据交换格式。易于人的阅读和编写,同时也易于及其解析和生成,JSON使用完全独立于语言的文本格式,而由语言来提供对于JSON的支持
轻量级指的是和xml相比
数据交换指的是客户端和服务器之间业务数据的传递格式。
包括C/C++/C#/java/javaScript/Perl/Python等都提供了对JSON的支持
JSON在JavaScript中的使用
JSON的定义
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
}]
}
JSON的访问
JSON本质上是一个对象
JSON中的key我们可以理解为是对象中的一个属性
JSON中的key访问就和访问对象的属性一样,json对象名.key
JSON的两个常用方法
JSON的存在有两种形式
- 对象的形式,叫json对象
- 字符串的形式,叫json字符串
一般在要操作json中数据的时候,需要json对象的格式
在要在客户端和服务器之间进行数据交换的时候使用json字符串。
API:
JSON.stringify() 把json对象转换为json字符串
JOSN.parse() 把json字符串转换为json对象
JSON在java中的使用
(需要提供导入json的jar包)–教程中用的是谷歌GSON
javaBean和json的互转
Bean bean = new Bean();
//创建gson对象实例
Gson gson = new Gson();
String beanString = gson.toJson(bean);//得到json字符串
gson.fromJson(beanString,Bean);//从json字符串转化回java对象
List和json的互转
List<Bean> beanList = new ArrayList();
beanList.add(new Bean(1));
beanList.add(new Bean(2));
Gson gson = new Gson();
String beanListJsonString = gson.toJson(beanList);
//从字符串转化为List
//List<Bean> list = gson.fromJson(beanListJsonString,personList.getClass());
//如上的方法有个问题:泛型的加入会导致取出的类型转换异常(List里面的元素不是Bean)
//Ctrl+p查看参数,如果转换是一个集合,需要用type而不是class
List<Person> list =
gson.fromJson(personListJsonString,new BeanListType.getType());
官方提供了一个反射的类TypeToken,帮助我们将json字符串转化为集合
public class BeanListType extends typeToken<ArrayList<Bean>>{
//内部的getType可以帮助正确的转化为Type并且提供转换为集合的支持
}
map和json的互转
Map<Integer,Bean> beanMap = new HashMap<>();
beanMap.put(1,new Bean(1));
beanMap.put(2,new Bean(2));
Gson gson = new Gson();
//map->json String
String beanMapJsonString = gson.toJson(beanMap));
//json String -> map
Map<Integer,Bean> BeanMap2=
gson.fromJson(personMapJsonString,new BeanMapType().getType());
//或者new TypeToken<HashMap<Integer,Person>>(){}.getType()---匿名内部类写法
public class BeanMapType extends TypeToken<HashMap<Integer,Person>{
}