JavaScript JSON
- JSON 是用于存储和传输数据的格式。
- JSON 通常用于服务端向网页传递数据 。
JSON全称JavaScript Object Notation
JSON是基于JavaScript的,是JavaScript的一个子集。JSON是用JavaScript语法来表示数据的一种轻量级语言。
JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。
文本可以被任何编程语言读取及作为数据格式传递。
JSON 语法规则
- 数据为 键/值 对。
一个名称对应一个值.
JSON 数据格式为 键/值 对,就像 JavaScript 对象属性。
键/值对包括字段名称(在双引号中),后面一个冒号,然后是值:
"name":"Runoob"
- 数据由逗号分隔。
- 大括号保存对象
JSON 对象保存在大括号内.
就像在 JavaScript 中, 对象可以保存多个 键/值 对:
{"name":"Runoob", "url":"www.runoob.com"}
- 方括号保存数组
JSON 数组保存在中括号内。
就像在 JavaScript 中, 数组可以包含对象:
{"sites":[
{"name":"Runoob", "url":"www.runoob.com"},
{"name":"Google", "url":"www.google.com"},
{"name":"Taobao", "url":"www.taobao.com"}
]}
以上 JSON 语法定义了 sites 对象: 对象 "sites" 是一个数组,包含了三个对象。
每个对象为站点的信息(网站名和网站地址)。
在JavaScript中, 对于对象构造有两种方法:基于对象的完整写法,字面量表示法。前者:
var obj = new Object();
obj.title = "title1";
obj.content = "content1";
而与之对应的字面量表示法则写为:
var obj = {
title: "title1",
content: "content1"
};
JSON基本就是字面量表示法的一个子集,除了强制要求键与字符串类型的值必须用双引号包起之外,它剔除了undefined、function等类型,也不包括浏览器内置对象类型(如Date、RegExp等),是基于文本的、比较纯粹的数据表示方法。
XML, JSON对比:
XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<article>
<title>Article Title1</title>
<content>content1</content>
</article>
<article>
<title>Article Title2</title>
<content>content2</content>
</article>
</root>
JSON:
{
"article" : [
{
"title": "Article Title1",
"content": "content1"
},
{
"title": "Article Title2",
"content": "content2"
}
]
}
JSON 字符串转换为 JavaScript 对象
通常我们从服务器中读取 JSON 数据(作为文件或作为 HttpRequest),并在网页中显示数据.
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同,由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象
使用字符串作为输入进行演示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<h2>从 JSON 字符串中创建对象</h2>
<p>
网站名: <span id="name"></span><br>
网站地址: <span id="url"></span><br>
</p>
<script>
var txt = '{ "sites" : [' +
'{ "name":"菜鸟教程" , "url":"www.runoob.com" },' +
'{ "name":"google" , "url":"www.google.com" },' +
'{ "name":"微博" , "url":"www.weibo.com" } ]}';
//eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,
// 然后生成 JavaScript 对象。
// 必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval ("(" + txt + ")");
//使用 JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象:
// obj = JSON.parse(txt);
document.getElementById("name").innerHTML=obj.sites[0].name
document.getElementById("url").innerHTML=obj.sites[0].url
</script>
</body>
</html>
JSON.parse()与 eval() 比较:
<script>
var value = 1;
var jsonstr = '{"data1":"hello","data2":++value}';
var data1 = eval('('+jsonstr+')');
console.log(data1);//这时value值为2
var data2=JSON.parse(jsonstr);
console.log(data2);//报错
</script>
eval()在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的)