JSON(8/31)

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()在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • 今天给大家讲一则笑话。 前几天在街上,我偶遇一位虽然一直都有电话号码,但从未拨通过的同学。然后不免就多聊了几句,临...
    琴瑟沉香阅读 297评论 0 1
  • 文/孤鸟差鱼 爱不爱 请便 恨不恨 也请便 一天会多过一天 一夜会多过一夜 一年会多过一年
    孤鸟差鱼阅读 465评论 0 3
  • 昨夜宿醉,我也是服了我自己! 全天监考,中午几乎来不及吃饭,太忙了!
    夏乙至阅读 164评论 0 0