概念
- JSON:JavaScript 对象表示法(JavaScript Object Notation)
- JSON现在多用于存储和交换文本信息的语法,进行数据的传输。
- JSON 比 XML 更小、更快,更易解析。
- 注意:JSON 虽然使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
区别
类似 XML
- JSON 是纯文本
- JSON 具有“自我描述性”(人类可读)
- JSON 具有层级结构(值中存在值)
- JSON 可通过 JavaScript 进行解析
- JSON 数据可使用 AJAX 进行传输
相比 XML 的不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的 JavaScript eval() 方法进行解析
- 使用数组
- 不使用保留字
总结
-
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
- 使用 XML
- 读取 XML 文档
- 使用 XML DOM 来循环遍历文档
- 读取值并存储在变量中- 使用 JSON
- 读取 JSON 字符串
- 使用 JSON
- 使用 XML
语法
- JSON 语法是 JavaScript 语法的子集。
语法规则
- JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName" : "John"
值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中) {“persons”:[{},{}]}
- 对象(在花括号中) { “firstName”:“John” , “lastName”:“Doe” }
- null
文件
- JSON 文件的文件类型是 “.json”
- JSON 文本的 MIME 类型是 “application/json”
使用
获取数据
- json对象.键名
- json对象[“键名”]
- 数组对象[索引]
/* 基本格式 */
var person = {"name":"cat","age":11}
var name11 = person.name;
var name12 = person["name"];
/* 嵌套格式 */
// JSON { JSON,JASON }
var persons = {
"personCat": {"name":"cat","age":11},
"personDog":{"name":"dog","age":12},
"personRat":{"name":"rat","age":13}}
var personCat = persons.personCat;
var name2 = persons.personCat.name;
// Array [JSON,JASON]
var array = [
{"name":"cat","age":11},
{"name":"dog","age":12},
{"name":"rat","age":13}]
var name3 = array[0].name;
// JSON { Array[JSON,JASON], Array[JSON,JASON] }
var persons = {
"person1":[
{"name":"cat","age":11},
{"name":"dog","age":12},
{"name":"rat","age":13},],
"person2":[
{"name":"cat","age":11},
{"name":"dog","age":12},
{"name":"rat","age":13},]
}
var name4 = persons.person1[0].name;
遍历
/* 基本格式 */
var person = {"name":"cat","age":11}
for (var key in person) {
// * key默认为字符串
alert(key);
alert(person.key); // * person."name"; 无法获取
alert(person[key]); // * person["name"]; 无法获取
}
/* 嵌套格式 */
var array = [
{"name":"cat","age":11},
{"name":"dog","age":12},
{"name":"rat","age":13}]
for (var i =0;i<array.length;i++) {
var p = array[i];
for (var key in p) {
alert(key);
alert(p[key]);
}
}
转换
- 转换
- 由于JSON对象的特性,在实际操作中,我们通过JSON对象代替Java对象在数据中的传输。所以,我们需要学习JSON对象和Java对象的相互转换。
- JSON解析器
- 常见的解析器:Jsonlib,Gson,fastjson,jackson
JSON转为Java对象
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
- readValue(json字符串数据,Class)
Java对象转换JSON
- 导入jackson的相关jar包
- 创建Jackson核心对象 ObjectMapper
- 调用ObjectMapper的相关方法进行转换
- writeValue(参数1,obj)
- File:将obj对象转换为JSON字符串,并保存到指定的文件中。
- Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中。
- OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中。 - writeValueAsString(obj)
- 将对象转为json字符串
- writeValue(参数1,obj)
注解
- @JsonIgnore:排除属性。
- @JsonFormat:属性值得格式化
- @JsonFormat(pattern = “yyyy-MM-dd”)
复杂java对象转换
- List:数组
- Map:对象格式一致
格式问题
- 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。
- 在浏览器端设置$.ajax属性
- $.get(type):将最后一个参数type指定为"json"
- 在服务器端设置MIME类型
- response.setContentType(“application/json;charset=utf-8”);
- 在浏览器端设置$.ajax属性