JSON(8/31)

2017-09-01  本文已影响0人  BaibaiWang
JavaScript JSON

JSON全称JavaScript Object Notation
JSON是基于JavaScript的,是JavaScript的一个子集。JSON是用JavaScript语法来表示数据的一种轻量级语言。

JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。
文本可以被任何编程语言读取及作为数据格式传递。

JSON 语法规则

"name":"Runoob"
{"name":"Runoob", "url":"www.runoob.com"}
{"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()在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的)

上一篇下一篇

猜你喜欢

热点阅读