一:概念
Json(JavaScript Object Notation,JS 对象简谱),是一种轻量级的数据交换模式。采用完全独立于编程语言的文本格式来存储和表示数据。
二:语法
2.1规则:
键:由单引号或者双引号括起来(也可以不同引号)
值:类型
a.字符串{"name":"zxx"}
b.数值{"age":42}
c.布尔值{"gender":true}
d.json对象{"location":{"区":"通州区","路":"中二路"}}
e.json数组{"emps":[{},{},{}]}
f.null
2.2定义格式:
1.
{键1:值1,键2:值2,.....}
var emp={"id":"A01","name":"hhh",age:40,"sex":false};
2.
{键1:[{},{},{}],键2:[{},{},{}]}
var emps = {"emps":[
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":false},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
]};
3.
[{},{},{}]
var es = [
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":false},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
];
2.3获取方式:
1.json对象.键
var emp={"id":"A01","name":"hhh",age:40,"sex":false};
alert(emp);
alert(emp.name);
alert(emp["name"]);
2.json对象["键"]
var emps = {"emps":[
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":false},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
]};
alert(emps);
alert(emps.emps[2].name);
3.数组对象[下标]
var es = [
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":true},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
];
alert(es);
alert(es[1]["sex"]);
alert(es[1].sex);
2.4遍历方式:
for(var key in json对象){
alert(key+"---"+json对象[key])
}
var emp={"id":"A01","name":"hhh",age:40,"sex":false};
for (var key in emp){
//alert(key+"-----------"+emp.key);//不行
alert(key+"-----"+emp[key]);
}
var es = [
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":true},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
];
for (var i =0;i<es.length;i++){
for (var key in es[i]){
alert(key+"---------"+es[i][key]);
}
}
// for (var key in es[0]){
// alert(key+"-------"+es[0][key]);
// }
//
// for (var key in es[1]){
// alert(key+"-------"+es[1][key]);
// }
//
// for (var key in es[2]){
// alert(key+"-------"+es[2][key]);
// }
var emps = {"emps":[
{"id":"A01","name":"hhh",age:40,"sex":false},
{"id":"A02","name":"www",age:40,"sex":false},
{"id":"A03","name":"fff",age:40,"sex":false},
{"id":"A04","name":"ggg",age:40,"sex":false}
]};
for (var i =0;i<emps.emps.length;i++){
for (var key in emps.emps[i]){
alert(key+":"+emps.emps[i][key]);
}
}
三、json数据和java对象的转换
json解析器:Jackson、Gson、Jsonlib
3.1 使用Jackson进行更新
3.1.1 Jackson使用步骤
1.导入相关jar包
2.创建核心类对象ObjectMapper
3.实现解析
a.java->json
WriteValueAsString(obj):将java对象转换成json字符串
WriteValue(参数1,参数2):
参数1:
File:将obj转换成json字符串,并写入指定的文件中
Writer:将object对象转换成json字符串,并封装到字符输出流
OutputStream:将object对象转换成json字符串,并返回一个封装了此json字符串的字符输出流对象
参数2:Object
package com.test;
import com.entity.Emp;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
public class Main {
@Test
public void test1() throws IOException {
Emp e = new Emp("zs",33,new Date(),false);
ObjectMapper mapper= new ObjectMapper();
// String json = mapper.writeValueAsString(e);
//
// System.out.println(json);
mapper.writeValue(new File("G:\\QQ\\a.txt"),e);
mapper.writeValue(new FileWriter("G:\\QQ\\b.txt"),e);
mapper.writeValue(new FileOutputStream("G:\\QQ\\c.txt"),e);
}
}
注解:
1.JsonIgonre:使某个属性不被解析成json数据
2.JsonFormat:属性格式化
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
@JsonIgnore
private boolean gender;
package com.test;
import com.entity.Emp;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class Main {
@Test
public void test1() throws IOException {
Emp e = new Emp("zs",33,new Date(),false);
ObjectMapper mapper= new ObjectMapper();
String json = mapper.writeValueAsString(e);
System.out.println(json);
//
// mapper.writeValue(new File("G:\\QQ\\a.txt"),e);
//
// mapper.writeValue(new FileWriter("G:\\QQ\\b.txt"),e);
//
// mapper.writeValue(new FileOutputStream("G:\\QQ\\c.txt"),e);
}
@Test
public void test2() throws IOException {
Emp e1 = new Emp("zs",33,new Date(),false);
Emp e2= new Emp("ds",13,new Date(),true);
Emp e3 = new Emp("ss",23,new Date(),false);
List<Emp> emps = new ArrayList<>();
emps.add(e1);
emps.add(e2);
emps.add(e3);
ObjectMapper mapper= new ObjectMapper();
String json = mapper.writeValueAsString(emps);
System.out.println(json);
}
@Test
public void test3() throws IOException {
Emp e1 = new Emp("zs",33,new Date(),false);
Emp e2= new Emp("ds",13,new Date(),true);
Emp e3 = new Emp("ss",23,new Date(),false);
Map<String,Emp> map = new HashMap<>();
map.put("a",e1);
map.put("b",e2);
map.put("c",e3);
ObjectMapper mapper= new ObjectMapper();
String json = mapper.writeValueAsString(map);
System.out.println(json);
}
}
b.json->java:
readValue(参数1,参数2)
参数1:json字符串
参数2:.class
@Test
public void test4() throws IOException {
String json = "{\"name\":\"李逵\",\"age\":42}";
ObjectMapper mapper= new ObjectMapper();
Emp e = mapper.readValue(json,Emp.class);
System.out.println(e);
}