JSON学习
概念
JSON(JavaScript Object Notation,JavaScript对象表示法)
将消息用对象封装起来
var p={"name":"张三","age":23,"gender":"M"};
JSON比XML更小、更快、更易解析
语法
-
基本规则
数据在名称/值对中:键用引号引起来,单引号和双引号都可以
数据的类型:
- 数字(整数或浮点数)
- 字符串(双引号)
- 逻辑值(true/false)
- 数组
- 对象
- null
数据由逗号分隔
花括号保存对象
方括号保存数组
我们可以直接在JS中定义JSON对象:
<script> var person={"name":"张三","age":23,"gender":"M"}; alert(person); </script>
-
获取数据
- json对象.键名
- json对象["键名"]
- json数组对象[索引]
第一种和第二种的区别就是第一种方法,键名不需要加引号,而第二种方法需要
JSON数据和Java对象的相互转换
JSON一般被当做传输时数据的存储格式
Java对象转换为Json
JSON解析器是一个工具类,常用的有:Jsonlib\Gson(谷歌)\fastjson(阿里)\jackson(springMVC框架中内置)
这里我们使用jackson,使用步骤为:
导入jackson的相关jar包
创建jackson核心对象ObjectMapper
-
调用ObjectMapper相关方法进行转化
示例:
//1.创建Person对象 Person p=new Person(); p.setAge(23); p.setName("张三"); p.setGender("M"); //2.创建jackson核心对象ObjectMapper ObjectMapper mapper=new ObjectMapper(); //3.转换 /* 转换方法: 1. mapper.writeValue(参数1,obj); 参数1: File:将Obj对象转换为JSON字符串,并保存到指定的文件中 Writer:将Obj对象转换为JSON字符串,并将JSON数据填充到字符输出流中 OutputStream:将Obj对象转换为JSON字符串,并将JSON数据填充到字节输出流中 2. mapper.writeValueAsString(obj);//将对象转换为JSON字符串 输出的字符串是{"name":"张三","age":23,"gender":"M"} */
注解:添加在Java对象的属性上
@JsonIgnore:用于排除属性,对应的属性就不会被转换到JSON中
-
@JsonFormat;用于属性值的格式化,也就是对该属性的转换结果的形式进行要求。例如Date类型的数据,如果直接转换的话输出的是毫秒值,显然不是我们想要的,我们可以这样操作:
@JsonFormat(pattern=“yyyy-MM-dd")
复杂Java对象的转换:集合和数组
List:直接把集合对象传进去,转换出来的就是集合形式的JSON
Map:输出的也是键值对的对象格式的JSON
JSON转为Java对象
这种用的相比上面的那种比较少
同样是使用Jackson,调用的方法是readValue(json字符串,Class类型),这里的Class类型也就是要转换为的Java对象的类型
String json="{\"gender\":\"M\",\"name\":\"张三\",\"age\":23}";
ObjectMapper mapper=new ObjectMapper();
mapper.readValue(json,Person.class);