JSON
一、概念
JSON(JavaScript Object Notation, JS 对象简谱) ,是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。
json用于存储和交换数据
json比xml更小、更快、更易解析
二、语法
2.1 规则
1.数据由键值对组成
键:由单引号或者双引号扩起来(也可以不用引号)
值:类型
a.字符串 {"name":"zxx"}
b.数值 {"age":42}
c.布尔值 {"gender":true}
d.json对象 {"location":{"区":"静安区","路":"纱帽路"}}
e.json数组 {"emps":[{},{},{}]}
f.null
2.键值对用冒号组成,多个键值对由逗号分隔
3.json对象:{}
4.json数组:[]
2.2 定义格式
1.
{键1:值1,健2:值2,...}
2.
{键1:[{},{},{}],键2:[{},{}]}
3.
[{},{},{}]
2.3 获取方式
1.json对象.键
2.json对象["键"]
3.数组对象[下标]
2.4 遍历方式
for(var key in json对象){
alert(key+"---"+json对象[key])
}
例子如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script>
/* var emp = {"id":"A01","name":"wlh","age":40,"sex":false};
for(var key in emp){
//alert(key+"---"+emp.key);//不行
alert(key+"---"+emp[key]);
}*/
/*var es = [
{"id":"A01","name":"wlh","age":41,"sex":false},
{"id":"A02","name":"pwb","age":42,"sex":true},
{"id":"A03","name":"tjj","age":43,"sex":false}
];
for(var i = 0 ;i < es.length; i++){
for(var key in es[i]){
alert(key+"---"+es[i][key]);
}
}*/
var emps = {"emps":[
{"id":"B01","name":"wlh","age":21,"sex":false},
{"id":"B02","name":"pwb","age":22,"sex":true},
{"id":"B03","name":"tjj","age":23,"sex":false}
]};
for(var i = 0;i < emps.emps.length;i++){
for(var key in emps.emps[i]){
alert(key+" : "+emps.emps[i][key]);
}
}
</script>
</head>
<body>
</body>
</html>
三、JSON数据和Java对象的转换
json解析器:Jackson、Gson、Jsonlib
3.1 使用Jackson解析
3.1.2 Jackson使用步骤
1.导入相关jar包
2.创建核心类对象ObjectMapper
3.实现解析
a.java->json
writeValueAsString(Object):将java对象转换成json字符串
writeValue(参数1,参数2):
参数1:
File:将obj对象转换成json字符串,并写入指定的文件中
Writer:将obj对象转换成json字符串,并封装到字符输出流中
OutputStream:将obj对象转换成json字符串,并封装到字节输出流中
参数2:Object
例子如下:
@Test
public void test1() throws Exception {
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("C:\\mine\\Java\\a.txt"),e);
mapper.writeValue(new FileWriter("C:\\mine\\Java\\b.txt"),e);
mapper.writeValue(new FileOutputStream("C:\\mine\\Java\\c.txt"),e);*/
}
@Test-list集合
public void test2() throws Exception {
Emp e1 = new Emp("zs",31,new Date(),false);
Emp e2 = new Emp("ls",32,new Date(),true);
Emp e3 = new Emp("ws",33,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-map集合
public void test3() throws Exception {
Emp e1 = new Emp("zs",31,new Date(),false);
Emp e2 = new Emp("ls",32,new Date(),true);
Emp e3 = new Emp("ws",33,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);
}
注解:
(1)JsonIgnore:使属性不被解析成json数据
(2)JsonFormat:属性格式化
b.json->java
readValue(参数1,参数2)
参数1:json字符串
参数2:.class
例子如下:
@Test
public void test4() throws Exception {
String json = "{\"name\":\"李逵\",\"age\":41}";
ObjectMapper mapper = new ObjectMapper();
Emp e = mapper.readValue(json,Emp.class);
System.out.println(e);
}
3.2 使用Jsonlib解析
JSONObject.fromObject(obj)例子如下:
@Test
public void test5(){
Emp e = new Emp("zs",31,new Date(),false);
JSONObject obj = JSONObject.fromObject(e);
String json = obj.toString();
System.out.println(json);
}
JSONArray.fromObject(obj)例子如下:
@Test
public void test6(){
Emp e1 = new Emp("zs",31,new Date(),false);
Emp e2 = new Emp("ls",32,new Date(),true);
Emp e3 = new Emp("ws",33,new Date(),false);
List<Emp> emps = new ArrayList<>();
emps.add(e1);
emps.add(e2);
emps.add(e3);
String json = JSONArray.fromObject(emps).toString();
System.out.println(json);
}
3.3 使用Gson解析
toJson(obj)例子如下:
@Test
public void test7(){
Emp e = new Emp("zs",31,new Date(),false);
Gson g = new Gson();
String json = g.toJson(e);
System.out.println(json);
}
@Test
public void test8(){
Emp e1 = new Emp("zs",31,new Date(),false);
Emp e2 = new Emp("ls",32,new Date(),true);
Emp e3 = new Emp("ws",33,new Date(),false);
List<Emp> emps = new ArrayList<>();
emps.add(e1);
emps.add(e2);
emps.add(e3);
Gson g = new Gson();
String json = g.toJson(emps);
System.out.println(json);
}