JSON
1. JSON 介绍
- JavaScript Object Notation(JavaScribt对象表示法)。
- JSON是轻量级的文本数据交换格式。
- JSON 独立于语言,具有自我描述性,更易理解。
1.1 JSON语法规则
-
数据由键(key)/值(value)描述,由逗号分隔;键和值用“ :”进行分割。
键和值都用双引号包裹(当值为数字时,可以不用双引号)。
-
大括号代表一个完整的对象,拥有多个键/值对。
-
中括号保存数组,多个对象之间使用逗号分隔。
最后一个键值对不需要用逗号,否则会破坏其中的规则!
例:
{“sites”:[
{"name":"慕课网","url":"www.imooc.com"},
{"name":"百度","url":"www.baidu.com"},
{"name":"百度","url":"www.baidu.com"}
]
}
1.2 利用JSON存储信息
创建文件emp.json
[
{
"empno": 7369,
"ename": "李宁",
"job": "软件工程师",
"hiredate": "2017-05-12",
"salary": 13000,
"dname": "研发部"
},
{
"empno": 7499,
"ename": "王乐",
"job": "客户经理",
"hiredate": "2017-04-22",
"salary": 10000,
"dname": "市场部",
"customers": [
{
"cname": "李东"
},
{
"cname": "刘楠"
}
]
}
]
1.3 javaScript中访问JSON
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var json = [
{
"empno": 7369,
"ename": "李宁",
"job": "软件工程师",
"hiredate": "2017-05-12",
"salary": 13000,
"dname": "研发部"
},
{
"empno": 7499,
"ename": "王乐",
"job": "客户经理",
"hiredate": "2017-04-22",
"salary": 10000,
"dname": "市场部",
"customers": [
{
"cname": "李东"
},
{
"cname": "刘楠"
}
]
}
];
//在浏览器控制台中对json内容进行输出
console.log(json);
for(var i = 0 ; i < json.length ; i++){
var emp = json[i];
document.write("<h1>");
document.write(emp.empno);
document.write("," + emp.ename);
document.write("," + emp.job);
document.write("," + emp.hiredate);
document.write("," + emp.salary);
document.write("," + emp.dname);
document.write("</h1>");
if(emp.customers != null){
document.write("<h2>---")
for(var j = 0 ; j < emp.customers.length ; j++){
var customer = emp.customers[j];
document.write(customer.cname + ",")
}
document.write("</h2>")
}
}
</script>
</head>
<body>
</body>
</html>
1.4 JSON与字符串相互转换
1.4.1 JSON.parse() 方法将字符串转换为JSON对象。
例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>字符串转JSON</title>
<script type="text/javascript">
var str = "{\"class_name\":\"五年级四班\"}";//str.ename
var json = JSON.parse(str);
console.log(str);
console.log(json);
document.write("班级:" + json.class_name);
</script>
</head>
<body>
</body>
</html>
\"…\"表示原意输出,避免被外面的符号产生干扰!
1.4.2 **JSON.stringify()**方法将JSON对象转换为字符串。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSON转字符串</title>
<script type="text/javascript">
var json1 = {"class_name" : "五年级四班"};
var str1 = JSON.stringify(json1);
console.info(json1);
console.info(str1);
var json2 = {};
json2.class_name = "五年级五班";
json2.floor = "逸夫楼四层";
json2.teacher = "王义夫";
console.info(json2);
</script>
</head>
<body>
</body>
</html>
注意:JSON对象,是浏览器内置对象(ie8以下版本浏览器不支持),javascript可以直接调用 。
2. JSON 与Java交互
2.1 介绍
-
Java的JSON工具包还有FastJson(阿里巴巴开发,国内使用最广泛), Jackson(国外使用的老牌工具包), Gson(谷歌开发的),Json-lib…(很多开源平台的明星项目)。
-
FastJson是阿里巴巴著名的JSON序列化与反序列工具包。
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java.Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
-
FastJson国内拥有大量使用者,拥有API简单,效率高等优点。
-
githup是全世界最著名的开源软件平台。
2.2 FastJson的序列化与反序列化
1.新建一个实体类;
2.实例化一个对象的类;
3.使用JSON.toString将对象序列化(变成字符串);
4.使用JSON.parseObject(json,Employee.class);
JSON注解:
1.@JSONField(format=“yyyy-MM-dd HH:mm:ss SSS”)
以年-月-日 时-分-秒 毫秒的格式输出日期。
2.@JSONField(name="")
将此注解标记的属性的名称修改为name后面的内容。
3.@JSONField(serialize = false)
对此注解标记的属性不做序列化操作(JSON字符串中不会转换该属性)。
2.3 FastJSON对象数组序列化与反序列化
public class FastJsonSample2 {
public static void main(String[] args) {
List emplist = new ArrayList();
for (int i = 1 ; i <= 100 ; i++) {
Employee employee = new Employee();
employee.setEmpno(4488 + i);
employee.setEname("员工" + i);
emplist.add(employee);
}
String json = JSON.toJSONString(emplist);
System.out.println(json);
List<Employee> emps = JSON.parseArray(json , Employee.class);
for(Employee e : emps) {
System.out.println(e.getEmpno() + ":" + e.getEname());
}
}
}