一、简介
JSON(JavaScript Object Notation, JavaScript 对象表示法) 是一种轻量级的数据交换格式。是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。
二、JSON语法
1、基本规则
1.1、数据在名称/值对中:json数据是由键值对构成的;
键用引号(单双都行)引起来,也可以不使用引号
值得取值类型:
数字(整数或浮点数);
字符串(在双引号中);
逻辑值(true 或 false);
数组(在方括号中),{"persons":[{},{}]};
对象(在花括号中),{"address":{"province":"陕西"....}};
null。
1.2、数据由逗号分隔:多个键值对由逗号分隔;
1.3、花括号保存对象:使用{}定义json 格式;
1.4、方括号保存数组:使用[]保存数组;
1.5、定义格式
//1.定义基本格式
var person = {"name": "张三", age: 23, 'gender': true};
//2.嵌套格式 {}———> []
var persons = {
"persons": [
{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}
]
};
//3.嵌套格式 []———> {}
var ps = [{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
2、获取数据
2.1、json对象.键名
var name = person.name;
2.2、json对象["键名"]
var name = person["name"];
2.3、数组对象[索引]
var name = persons.persons[2].name;
2.4、遍历
//获取person中的所有值
for(var key in person){
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]);
}
}
三、JSON数据和Java对象的相互转换
1、JSON解析器
常见的解析器有Jsonlib,Gson,fastjson,jackson。
2、使用jackson解析器将JSON转为Java对象
2.1、导入jackson的相关jar包
将jackson-annotations-2.2.3.jar、jackson-core-2.2.3.jar和jackson-databind-2.2.3.jar导入到项目中
2.2、创建Jackson核心对象 ObjectMapper
JavaBean
package package com.wedu.demo.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 + '\'' +
'}';
}
}
创建ObjectMapper对象
//1.初始化JSON字符串
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
//2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
2.3、调用ObjectMapper的相关方法进行转换:readValue(json字符串数据,Class)
//3.转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
3、使用jackson解析器将Java对象转换JSON
3.1、导入jackson的相关jar包
将jackson-annotations-2.2.3.jar、jackson-core-2.2.3.jar和jackson-databind-2.2.3.jar导入到项目中
3.2、创建JavaBean和Jackson核心对象 ObjectMapper
JavaBean
package package com.wedu.demo.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 + '\'' +
'}';
}
}
创建ObjectMapper对象
//1.创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
//2.创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
3.3、调用ObjectMapper的相关方法进行转换
String json = mapper.writeValueAsString(p);
System.out.println(json);//{"name":"张三","age":23,"gender":"男"}
四、应用案例
1、校验用户名是否存在