概念: JavaScript Object Notation —— JavaScript对象表示法
- json现在多用于存储和交换文本信息的语法
- 进行数据的传输
- JSON 比 XML 更小、更快,更易解析。
语法:
基本规则:
- json数据是由
键值对
构成的- 键用引号(单双都行)引起来,也可以不使用引号
- 值的取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中):{“persons”:[ { },{ } ] }
5. 对象(在花括号中): {“address”: { “province”:“陕西”… } }
6. null - 数据由逗号分隔:多个键值对由逗号分隔
- 花括号保存对象:使用{ }定义json 格式
- 方括号保存数组:[ ]
- 获取数据:
-
json对象.键名
-
json对象[“键名”]
-
数组对象[索引]
示例一:
//json对象,对象里存数组,嵌套格式 {}———> []
var persons = {
"persons": [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
]
};
//获取王五值
var name1 = persons.persons[2].name;
示例二:
//json数组,数组里存对象,嵌套格式 []———> {}
var ps = [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
];
//获取李四值
alert(ps[1].name);
遍历
- 使用
for in
循环遍历
//1.定义基本格式
var person = {"name": "张三", age: 23, 'gender': true};
//获取person对象中所有的键和值
for(var key in person){
//这样的方式获取不行。因为相当于 person."name"
alert(key + ":" + person.key);//错误方法
//正确方法
alert(key+":"+person[key]);
}
/*---------------------------------------------------------*/
//1.定义基本格式
var ps = [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
];
//获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
}
JSON数据和Java对象的相互转换
- JSON解析器:
- 常见的解析器:Jsonlib,Gson,fastjson,jackson
1. JSON转为Java对象
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
readValue(json字符串数据,Class)
//1.初始化JSON字符串
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
//2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
//3.转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
2. Java对象转换JSON
- 使用步骤:
-
导入jackson的相关jar包
-
创建Jackson核心对象 ObjectMapper
-
调用ObjectMapper的相关方法进行转换
转换方法:
- writeValue(参数1,obj):
- 参数1:
File
:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer
:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream
:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
- 参数1:
- writeValueAsString(obj):将对象转为json字符串
示例:
//1.创建map对象
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","张三");
map.put("age",23);
map.put("gender","男");
//2.转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(map);
//预测输出结果{"name":"张三","age":23,"gender":"男"}
System.out.println(json);//{"gender":"男","name":"张三","age":23},map集合没有顺序
注解:
-
@JsonIgnore:排除属性。
被注解的属性不会写入到Json中 -
@JsonFormat:属性值得格式化
例如: @JsonFormat(pattern = “yyyy-MM-dd”)