计算机科学

首页 > 计算机科学

JSON

2018-09-06 14:14:01     所属分类:置标语言
JSON
JSON vector logo.svg
扩展名 .json
互联网媒体类型 application/json
类型代码英语Type code TEXT
统一类型标识 public.json
格式类型 数据交换
延伸自 JavaScript
标准 RFC 7159, ECMA-404
网站 json.org

JSONJavaScript Object Notation)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。

JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json

目录

  • 1 简介
  • 2 应用领域
    • 2.1 WEB开发
    • 2.2 NoSQL数据库
  • 3 举例
  • 4 安全问题
    • 4.1 读取JSON
    • 4.2 跨站访问问题
  • 5 与其他格式的比较
    • 5.1 XML
    • 5.2 MessagePack
    • 5.3 格式化工具
  • 6 参考文献
  • 7 参见
  • 8 外部链接

简介

JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScript以eval()函数(javascript通过eval()调用解析器)读入。不过这并不代表JSON无法使用于其他语言,事实上几乎所有与网页开发相关的语言都有JSON函数库。

JSON用于描述资料结构,有两种结构存在:

  • 对象(object):一个对象包含一系列非排序的名称/值对(pair),一个对象以{开始,并以}结束。每个名称/值对之间使用:分区。
  • 数组 (array):一个数组是一个值(value)的集合,一个数组以开始,并以结束。数组成员之间使用,分区。

具体的格式如下:

  • 名称/值(pair):名称和值之间使用隔开,一般的形式是:
{name:value}

一个名称是一个字符串; 一个值(value)可以是一个字符串(string),一个数值(number),一个对象(object),一个布尔值(bool),一个有序列表(array),或者一个null值。

  • 字符串:以""括起来的一串字符。
  • 数值:一系列0-9的数字组合,可以为负数或者小数。还可以用e或者E表示为指数形式。
  • 布尔值:表示为true或者false。
  • 值的有序列表(array):一个或者多个值用,分区后,使用括起来就形成了这样的列表,形如:
value, value

JSON的格式描述可以参考RFC 4627。

应用领域

WEB开发

JSON最开始被广泛的应用于WEB应用的开发。不过目前JSON使用在JavaScript、Java、Node.js应用的情况比较多,PHP、C#等开发的WEB应用主要还是使用XML。

NoSQL数据库

相对于传统的关系型数据库,一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDB、CouchDB、RavenDB等。

举例

 1 {
 2      "firstName": "John",
 3      "lastName": "Smith",
 4      "sex": "male",
 5      "age": 25,
 6      "address": 
 7      {
 8          "streetAddress": "21 2nd Street",
 9          "city": "New York",
10          "state": "NY",
11          "postalCode": "10021"
12      },
13      "phoneNumber": 
14      
15          {
16            "type": "home",
17            "number": "212 555-1234"
18          },
19          {
20            "type": "fax",
21            "number": "646 555-4567"
22          }
23      
24  }

这种JSON格式也被用来当作Minecraft的一个游戏内容:

 1 
 2      {
 3           "text": "This is the text",
 4           "color": "dark_red",
 5           "bold": "true",
 6           "strikethough": "true",
 7           "clickEvent":
 8                {
 9                     "action": "open_url",
10                     "value": "zh.wikipedia.org"
11                },
12           "hoverEvent":
13                {
14                     "action": "show_text",
15                     "value":
16                     {
17                          "extra": "something"
18                     }
19                }
20      },
21      {
22           "translate": "item.dirt.name",
23           "color": "blue",
24           "italic": "true"
25      }
26 

安全问题

读取JSON

由于JSON是JavaScript的子集,所以一般都会使用eval()作为读取数据的方式,如果是针对可靠的数据来源,在不支持原生JSON解析的浏览器上面这是最快速的方法。然而由于eval方法同样可以执行任意的JavaScript代码,因此当数据来源不可靠时则可能产生安全问题。如下面的例子,直接用eval执行时会跳转:

var json= eval("{message:(function (){ window.location='http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C'; })()}");

其中一种防止不安全代码出现的解决办法,是透过浏览器原生支持的JSON.parse(str)方法读取JSON数据,目前已经得到大部分主流浏览器的支持(IE8+,Firefox 3.5+,Chrome4+/Safari4+,Opera10+),在不支持原生JSON对象的浏览器上面可以使用parseJSON方法进行读取[1]parseJSON采用解析器验证读入的代码是否真的是JSON代码,这样就更安全。但由于这是用模拟的方式读取,速度上会比eval()慢。

跨站访问问题

另外一个安全上的问题则是跨站请求伪造(Cross-site request forgery,简称CSRF或XSRF)。这个问题在Javascript中的状况是,由于Javascript采用了称为“沙盒”的机制,这种机制限制Javascript引擎仅能引入同一个站点的代码,因而某种程度上提高了安全性。

与其他格式的比较

XML

JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。这使得XML在程序判读上需要比较多的功夫。主要的原因在于XML的设计理念与JSON不同。XML利用标记语言的特性提供了绝佳的延展性(如XPath),在数据存储,扩展及高级检索方面具备对JSON的优势,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。

MessagePack

MessagePack英语MessagePack宣称比JSON更短小,快速。

格式化工具

JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,会让人陷入繁琐复杂的数据节点查找中。开发者可以通过在线JSON格式化工具,来更方便的对JSON数据进行节点查找和解析。

参考文献

  1. ^ JSON and Browser Security. 

参见

  • JSONP
  • AJAX
  • JavaScript
  • YAML
  • HOCON

外部链接

  • (英文) JSON,关于JSON的规格、文件,以及在其他语言实做的信息
  • JSON中文说明
  • (英文) RFC 4627,JSON在RFC里的规格
  • JSON器
  • JSON分析器
  • JSON到CSV转换器
  • Minecraft指令─JSON文字格式
  • JSON在线格式化工具
版权声明:本文由北城百科网创作,转载请联系管理获取授权,未经容许转载必究。https://www.beichengjiu.com/computerscience/340703.html

相关推荐