什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式。
JSON格式
- JSON对象(object):一个对象包含一系列非排序的名称/值对,以 { 开始,以 } 结束。每个名称/值对之间使用 : 分隔。
- JSON数组(array):一个数组是一个值的集合,一个数组以 [ 开始,并以 ] 结束。值之间使用 , 分隔。
名称是一个字符串;值可以是字符串(string),数字(number),对象(object),布尔值(bool),数组(array),null值。
{
"firstName": "John",
"lastName": "Smith",
"sex": "male",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
JSON应用
JSON被广泛应用于WEB应用的开发。
访问JSON对象
因为JSON 语法是 JavaScript 语法的子集,所以,在 JavaScript 中,处理JSON对象,很方便。
var myObj = { "name":"runoob", "alexa":10000, "site":null };
var x = myObj["name"]; //或者使用另一种方式:x = myObj.name;
//循环
for (x in myObj) {
document.getElementById("demo").innerHTML += x + "<br>";
}
//嵌套JSON对象
myObj = {
"name":"runoob",
"alexa":10000,
"sites": {
"site1":"www.runoob.com",
"site2":"m.runoob.com",
"site3":"c.runoob.com"
}
}
//访问嵌套的JSON对象
x = myObj.sites.site1; // 或者 ,x = myObj.sites["site1"];
//修改值
myObj.sites.site1 = "www.google.com";
//删除对象的属性
delete myObj.sites.site1;
访问JSON数组
var test = [ "Google", "Runoob", "Taobao" ];
var result = test[0];
JSON.parse()
JSON 通常用于与服务端交换数据。服务端传过来的数据一般是JSON字符串。
JSON对象和JOSN字符串的区别?
//1、JSON对象
var str2 = { "name": "asan", "sex": "man" };
//2、JSON字符串
var str2 = '{ "name": "asan", "sex": "man" }';
我们可以使用 JSON.parse() 方法将JSON字符串转换为 JavaScript 对象。
//格式
JSON.parse(text[, reviver])
//说明
text:必需, 一个有效的 JSON 字符串。
reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
示例:使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
};
xmlhttp.open("GET", "/try/ajax/json_demo.txt", true);
xmlhttp.send();
JSON.stringify()
JSON 通常用于与服务端交换数据。在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
//格式
JSON.stringify(value[, replacer[, space]])
//说明
value:必需, 一个有效的 JSON 对象。
replacer:可选。用于转换结果的函数或数组。
space:可选,文本添加缩进、空格和换行符
eval()
JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据,将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
//格式
var obj = eval ("(" + txt + ")"); //txt为JSON字符串
//示例
var txt = '{ "sites" : [' +
'{ "name":"菜鸟教程" , "url":"www.runoob.com" },' +
'{ "name":"google" , "url":"www.google.com" },' +
'{ "name":"微博" , "url":"www.weibo.com" } ]}';
var obj = eval ("(" + txt + ")");
document.getElementById("name").innerHTML=obj.sites[0].name
document.getElementById("url").innerHTML=obj.sites[0].url
此函数与JSON.parse()效果一致,推荐使用JSON.parse()。
JSON与XML比较
XML在数据存储,扩展及高级检索方面具备优势。
JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。
JSON 独立于语言
JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
JSON与JavaScript
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
JSON与@ResponseBody
Spring MVC中有一个注解@ResponseBody,使用此注解需引用三个依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用场景:异步获取数据;返回值不是HTML页面,而是其他某种格式的数据(如json、xml等)。以下为示例代码:
function login() {
var datas = '{"username":"' + $('#username').val() + '","userid":"'
+ $('#userid').val() + '","status":"' + $('#status').val() + '"}';
$.ajax({
type : 'POST',
contentType : 'application/json',
url : "${pageContext.request.contextPath}/user/login",
processData : false,
dataType : 'json',
data : datas,
success : function(data) {
alert("userid: " + data.userid + "username: " + data.username
+ "status: "+ data.status);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert("出现异常,异常信息:"+textStatus,"error");
}
});
};
@RequestMapping(value = "user/login")
@ResponseBody
// 将ajax(datas)发出的请求写入 User 对象中,返回json对象响应回去
public User login(User user) {
User user = new User();
user .setUserid(1);
user .setUsername("MrF");
user .setStatus("1");
return user ;
}
异步获取 Json 数据,加上 @Responsebody 注解后,就会直接返回 Json 数据。
JSON格式化工具
https://c.runoob.com/front-end/53
参考资料: http://www.runoob.com/json/json-tutorial.html
参考资料: https://zh.wikipedia.org/zh-cn/JSON
参考资料: https://blog.csdn.net/ff906317011/article/details/78552426