JSON学习笔记总结
概念:
JSON:JavaScript Object Notation JavaScript对象表示法
在Java中对象表示法:将数据封装到对象中
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
javascript中对象表示法:将数据封装到对象中
var p = {"name":"张三","age":23,"gender":"男"};
1.json现在多用于存储和交换文本信息的语法
2.进行数据的传输
3.JSON 比 XML 更小、更快,更易解析。
语法:
1.基本规则:
数据在名称/值对中:json数据是由键值对构成的
键用引号(单双都行)引起来,也可以不使用引号
值(value)的取值类型:
1. 数字(整数或浮点数)
2. 字符串(在双引号中)
3. 逻辑值(true 或 false)
4. 数组(在方括号中) {"persons":[{},{}]}
5. 对象(在花括号中) {"address":{"province":"陕西"....}}
6. null
数据由逗号分隔:多个键值对由逗号分隔
花括号保存对象:使用{}定义json 格式
方括号保存数组:[... ...]
2.获取数据:
1. json对象.键名
2. json对象["键名"]
3. 数组对象[索引]
例:
遍历:
//1.定义基本格式
var person = {"name": "张三", age: 23, 'gender': true};
var ps = [{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
//获取person对象中所有的键和值
//for in 循环
for(var key in person){
//这样的方式获取不行。因为相当于 person."name"
//alert(key + ":" + person.key);
alert(key+":"+person[key]);
}
//获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
//拿到每一个Person对象
var p = ps[i];
//拿到每一个Person对象后再遍历一遍
for(var key in p){
alert(key+":"+p[key]);
}
}
JSON数据和Java对象的相互转换
JSON解析器(常用的封装好的工具类):Jsonlib,Gson,fastjson,jackson(常见的解析器)
1.JSON转为Java对象
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
第三步中提到的转换所运用的方法:
1. readValue(json字符串数据,Class)
例:
//演示 JSON字符串转为Java对象
@Test
public void test5() throws Exception {
//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
使用步骤:
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
第三步中提到的转换所运用的方法:
1.writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
2.writeValueAsString(obj):将对象转为json字符串
例:
//Java对象转为JSON字符串
@Test
public void test1() throws Exception {
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.转换
/*
转换方法:
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串
*/
String json = mapper.writeValueAsString(p);
//{"name":"张三","age":23,"gender":"男"}
System.out.println(json);//{"name":"张三","age":23,"gender":"男"}
//writeValue,将数据写到d://a.txt文件中
mapper.writeValue(new File("d://a.txt"),p);
//writeValue.将数据关联到Writer中
mapper.writeValue(new FileWriter("d://b.txt"),p);
}
注解的使用:
1.@JsonIgnore:排除属性。对应的属性的键值对就不会被转化成json字符串了
2.@JsonFormat:属性值的格式化
例:@JsonFormat(pattern = "yyyy-MM-dd")
== 例:==
@Test
public void test2() throws Exception {
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
p.setBirthday(new Date());
//2.转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(p);
System.out.println(json);
//没使用@JsonFormat注解的结果:{"name":"张三","age":23,"gender":"男","birthday":1530958029263}
//使用@JsonFormat注解的结果:{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"}
}
复杂Java对象转换成json格式的使用:
1. List:数组
2. Map:对象格式一致
例:List集合的转换
@Test
public void test3() throws Exception {
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
p.setBirthday(new Date());
Person p1 = new Person();
p1.setName("张三");
p1.setAge(23);
p1.setGender("男");
p1.setBirthday(new Date());
Person p2 = new Person();
p2.setName("张三");
p2.setAge(23);
p2.setGender("男");
p2.setBirthday(new Date());
//创建List集合
List<Person> ps = new ArrayList<Person>();
ps.add(p);
ps.add(p1);
ps.add(p2);
//2.转换
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(ps);
// [{},{},{}]
//[
//{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"},
//{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"},
//{"name":"张三","age":23,"gender":"男","birthday":"2018-07-07"}
//]
System.out.println(json);
}
例:Map集合的转换成json格式的使用
@Test
public void test4() throws Exception {
//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}
}