概念
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON一种数据格式。它本身是一串字符串,只是它有固定格式的字符串,符合这个数据格式要求的字符串,我们称之为JSON。
user包含 3 个用户(对象),数组中每个对象表示了姓名和年龄:
var user = [
{ "name": "张三", "age": 26 },
{ "name": "李四", "age": 29 },
{ "name": "王五", "age": 31 }
]
作用
java可以使用对象对一些属性进行封装。而JSON是在JavaScript中存储和交换文本信息的语法,类似 XML。但是它比 XML 更小、更快,更易解析。
语法规则
- 数据在名称/值对中:json数据是由键值对构成的,键用引号(单双都行)引起来,也可以不使用引号
- 数据由逗号分隔:多个键值对由逗号分隔
- 花括号保存对象
- 方括号保存数组
数据的书写格式是:{Key:Value}
、{Key:Array}
例如:
{"name" : "张三"}
值的范围:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(
true
或false
) - 数组(在方括号中)
- 对象(在花括号中)
null
获取数据:
1. JSON对象.键名
var myObj, x;
myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj["name"];
2. JSON对象["键"]
var myObj, x;
myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj["name"];
嵌套 JSON 对象
JSON 对象中可以包含另外一个 JSON 对象:
myObj = {
"name":"runoob",
"alexa":10000,
"sites": {
"site1":"www.baidu.com",
"site2":"m.taobao.com",
"site3":"c.csdn.net"
}
}
可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。
x = myObj.sites.site2;
// 或者
x = myObj.sites["site1"];
JSON数据和Java对象的相互转换
1. Java转换为JSON对象(常用)
用jackson解析器实现,步骤如下:
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
转换方法:
1. writeValue(参数1,obj):
参数1可以是以下几种:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
//Java对象转为JSON字符串
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.writeValue方法将对象传入转换到文件中
String json = mapper.writeValue(new File("d://a.txt"),p);
2. writeValueAsString(obj):将对象转为json字符串
//Java对象转为JSON字符串
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.writeValueAsString方法将对象传入转换为json
String json = mapper.writeValueAsString(p);
System.out.println(json); //{"name":"张三","age":23,"gender":"男"}
注解:
1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值的格式化
例如: @JsonFormat(pattern = "yyyy-MM-dd")
复杂的java对象转换
1. List:数组
2. Map:对象格式一致
依旧使用上面的方法,不过传入方法内的参数不再是一个原来的对象,而是集合
2. JSON转换为Java对象
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
readValue(json字符串数据,Class)