JSON
第一章 概念
一、概念
JavaScript Object Notation JavaScript对象表示法
Java代码:
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
JSON代码:
var p = {"name":"张三","age":"23","gender":"男"};
- json现在多用于存储和交换文本信息的语法
- 进行数据的传输
- JSON比XML更小、更快、更易解析
第二章 语法
2.1基本规则
一、数据在名称/值对中:json数据是由键值对构成的
键用引号(单双都行)引起来,也可以不使用引号
值的取值类型:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在方括号中)
{"persons":[{},{}]}
- 对象(在花括号中)
{"adderss":{"province":"辽宁"}}
- null
二、数据由逗号分隔:多个键值对由逗号分隔
三、花括号保存对象:使用{}定义json格式
四、方括号保存数组:[ ]
2.2获取数据
一、json对象.键名
二、json对象[“键名”]
三、数组对象[索引]
基本获取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//1.定义基本格式
var person = {"name":"张三","age":23,"gender":true};
//获取name的值
// var name = person.name;
var name = person["name"];
alert(name);
// alert(person);
//2.嵌套格式 {} ---> []
var persons = {
"persons":[
{"name":"张三","age":23,"gender":true},
{"name":"李四","age":23,"gender":true},
{"name":"王五","age":23,"gender":false}
]
};
// alert(persons);
//获取王五
var name1 = persons.persons[2].name;
alert(name1);
//2.嵌套格式 [] ---> {}
var ps = [
{"name":"张三","age":23,"gender":true},
{"name":"李四","age":23,"gender":true},
{"name":"王五","age":23,"gender":false}
];
// alert(ps);
//获取李四
alert(ps[1].name);
</script>
</head>
<body>
</body>
</html>
遍历获取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//1.定义基本格式
var person = {"name":"张三","age":23,"gender":true};
//2.嵌套格式 [] ---> {}
var ps = [
{"name":"张三","age":23,"gender":true},
{"name":"李四","age":23,"gender":true},
{"name":"王五","age":23,"gender":false}
];
//获取person对象中所有的键和值
//for in 循环
for (var key in person){
// alert(key);
// alert(key + ":" + person.key);这样的方式获取不到,因为相当于person."name"
alert(key + ":" + person[key]);
}
//获取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for (var key in p){
alert(key + ":" + p[key]);
}
}
</script>
</head>
<body>
</body>
</html>
第三章 JSON数据与Java对象
- JSON解析器:
- Jsonlib,Gson,fastjson,jackson(SpringMVC内置解析器)
3.1JSON转为Java对象
(了解)
readValue(json数据,class类型(对象类型))
3.2Java对象转为JSON
一、使用步骤
1.导入jackson相关jar包
2.创建Jackson核心对象 ObjectMapper
3.调用ObjectMapper的相关方法进行转换
package com.priv.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.priv.domain.Person;
import org.junit.Test;
import java.io.File;
import java.io.FileWriter;
public class JacksonTest {
//Java对象转JSON
@Test
public void test1() throws Exception {
//创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//转换
/*
* 转换方法:
* writeValue(参数1,obj):
参数1:
File: 将obj对象转换为J5oN字符串,并保存到指定的文件中
writer: 将obj对象转换为3soN字符串,并将json数据填充到字符输出流中
OutputStream: 将obj对象转换为3SoN字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串
* */
String json = mapper.writeValueAsString(p);
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);
}
}
package com.priv.domain;
public class Person {
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
二、细节
1.注解
- @JsonIgnore:排除属性
- @JsonFormat:属性值的格式化
@JsonFormat(pattern = "yyy-MM-dd")
private Date birthday;//默认打印出来是毫秒值,加上注解后,会相应格式化
2.复杂java对象转换
- List:打印出来:数组
- Map:打印出来:对象格式一致