JSON
概念
JavaScript Object Notation :JavaScript对象表示法(早期:在JavaScript中,用json来表示对象)
例:var p = {“name”:“张三”,“age”:“23”,“gender”:“男”};
json:现在多用于存储和交换文本信息的语法,类似于xml。进行数据传输,由于数据量比较小,比较有优势。
语法
1.基本规则
数据在名称/值对中:json数据是由键值对构成的键用引号(单双都行)引起来,也可以不使用引号。
值得取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {“persons”:[{},{}]}(可以内含多个person)
5. 对象(在花括号中) {“address”:{“province”:“陕西”…}}
6. null
数据由逗号分隔:多个键值对由逗号分隔
花括号保存对象:使用{}定义json 格式
方括号保存数组:[]
定义格式:
这个代表的是一个键中它的值是一个数组,而该数组中,又是多个对象
这个代表的是一个数组,该数组里面有多个对象
获取对象
1.json对象.键名
2. json对象[“键名”]
例var name = persons[2][“name”];
4. 数组对象[索引]
5. 遍历
例:比如说我想获取下图王五的年龄
var age = persons.persons[2].age;这样就可以获取到该值了。
遍历测试:可以达到效果
数组遍历测试:也可以达到效果:
JSON数据和JAVA相互转换
JSON解析器
常见的解析器:Jsonlib,Gson,fastjson,jackson
jackson:springmvc内置的json解析器
1.使用步骤:
1.导入jackson的相关jar包
2.创建Jackson核心对象 ObjectMapper
3.调用ObjectMapper的相关方法进行转换
在web下面创建一个WEB-INF模块,然后再创建一个lib模块将jar包放入里面
放入jar包以后,还有将jar包加入到模块中,
1.JAVA转化成为JSON对象
有了json解析器的帮助java对象转换成为json数据就比较快了。
1.先创建一个Person类
2.写一个test类,创建一个Person对象并对其赋值,然后创建Jackson的核心对象,ObjectMapper,并调用其内部转换方法即可。
代码如下:
package cn.sainan114.test;
import cn.sainan114.domain.Person;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.File;
import java.io.FileWriter;
/**
* FileName: Jsontest
*
* @Author:luguobao Date: 15:09
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
public class Jsontest {
@Test
public void test(){
//1.创建Person对象
Person p = new Person();
p.setAge(22);
p.setGender(false);
p.setName("zhangsan");
//2.创建Jackson的核心对象ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//转换
/**
* 转换方法writeValueAsString(obj):将对象转为json字符串
* writeValue(参数1,obj)
* 参数1:File:将obj对象转换为JSON,并保存到指定文件中
* Writer:将obj对象转化为JSON字符串,并将json数据填充到字符输出流
* OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
*/
try {
String json = mapper.writeValueAsString(p);
//结果如下:{"name":"zhangsan","age":22,"gender":false}
//System.out.println(json);
mapper.writeValue(new File("d://a.txt"),p);
mapper.writeValue(new FileWriter("d://b.txt"),p);
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果如下:
注解
在java转换json的过程中,可以使用两个注解
1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值得格式化
测试如下:
在类中加入一个实例变量,实现其get,set方法,在上面加入注解
新建test2(),并进行测试
结果如下:
@JsonFormat(pattern = “yyyy-MM-dd”)
pattern代表的是我们期望的样子
测试成功。
复杂的java对象转换
list集合:数组
map集合:和对象结果是一样的
其实对于list来说是一样的:
其输出结果是一个数组
用Map键值对
JSON转换为Java对象
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
1. readValue(json字符串数据,Class)
代码及结果如下: