资讯专栏INFORMATION COLUMN

JSON数据格式及其在WEB开发中的应用

red_bricks / 1464人阅读

摘要:是什么是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,是原生格式,这意味着在中处理数据不需要任何特殊的或工具包。底层存储为格式是个构建在之上的新型查询语言。

JSON是什么?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。

RFC: http://www.rfc-editor.org/rfc...

JSON的历史

在2001年,JSON被道格拉斯•克罗克福德(Douglas Crockford)创建,并在RFC4627与IETF(因特网工程任务组)标准中被规定;详情见 http://tools.ietf.org/html/rf...。根据规范,JSON的IANA(互联网数字分配机构)媒体类型是application/json,文件类型是json。

它基于JavaScript语言,是在JavaScript的数组(array)和对象(object)基础上发展而来;

道格拉斯从JS语言中发现的(也可以说是他创造出来的),比当时流行的XML数据传输要优越;

JSON官方网站:http://json.org/

JSON是语言无关的,支持语言如下

8th,ABAP,Ada,AdvPL,ASP,AWK,Bash,BlitzMax,C,C++,C#,Ciao,Clojure,Cobol,ColdFusion,

D,Dart,Delphi,E,Fantom,FileMaker,Fortran,Go,Groovy,Haskell,Java,JavaScript,LabVIEW,Lisp,LiveCode,LotusScript,LPC,Lua

M,Matlab,Net.Data,Nim,Objective C,OCaml,PascalScript,Perl,Photoshop,PHP,PicoLisp,Pike,PL/SQL,PowerShell,PureBasic,Puredata,Python,

R,Racket,Rebol,RPG,Rust,Ruby,Scheme,Squeak,Symbian,Tcl,Visual Basic,Visual FoxPro

json与ajax

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术;

虽然 Ajax 先出来了,但是目前前后端的ajax通讯几乎都是json格式的了。

json与xml

JSON 和 XML的对比

可读性: JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。

可扩展性: XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

编码难度: XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。其实手工拼json其实也是个有挑战的活儿

解码难度: XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

流行度: XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。

json与xml互相转换

JSON的格式必须是数组或者对象,其属性支持一下类型:

boolean: true, false

number: 0, 1, 2, 3

string: "abc"

object: null, {}, {"a": "b"}

array: [], [1, 2]

严格的语法约束

不能有ascii之外的字符,汉字应使用"u6c49"格式;

然而在utf-8流行的时代,汉字不编码已不是啥大问题了;

不能有注释,行注释与块注释都不可以;

字符串中不能有TAB,使用"t"表示;

对象中的所有的key都必须添加双引号,所有的字符串类型的value也都必须是双引号格式的;

json与js

因为JSON源于JS,所以JSON在JS中具有得天独厚的优势;

因为JS是web环境下B端开发语言的不二之选,所以JSON在WEB中大行其道;

优势:

JS的语法子集,合法的JSON代码在JS中也是合法的JS代码,内嵌JSON传输随处可见,jsonp的原理便是基于此前提的;

解析JSON数据的成本足够小,eval,json.js, JSON.parse(str)

各种封装库直接透传json格式,导致json诞生之后迅速取代xml在数据传输中的地位;

JSON序列化在JS中也非常容易,json.js,JSON.stringify(json/*, null, " "*/);

eval解析json问题:
var str = "{"name":"value"}";
// 方法1
var json = eval("(" + str + ")");   // 存在诸如 XSS 攻击风险
// 方法2
var json;
eval("json = " + str);
JSON在其他语言中的序列化问题

这里不说解析(反序列化),只要是"合法的"JSON数据,解析库使用的正确,并且二者相匹配,不应该有问题;

关于格式化问题:格式化是为了方便调试,生产环境中,应避免使用;

nodejs: 和浏览器中基本一致;

PHP: json_encode,json_decode(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

Ruby: @json = @data.to_json, @data = JSON.parse(json)

Java:

JSON-java: JSONXXX.fromObject(str), obj.toString()

JSONObject jsonObj = JSONObject.fromObject(jsonString);
JSONArray jsonArr = JSONArray.fromObject(jsonString);

google-gson: gson.toJson, gson.fromJson

JSON与其他语言之间的类型对应关系
json js php ruby java
boolean boolean boolean true,false boolean
number number integer, float Integer, Float int, float, double
string string string String String
array Array Array Array []
object Object Array Hash Object(from class)
null null null Nil null
数据类型问题为何如此重要?

弱类型语言不代表没有类型

最新的JS引擎(V8等),约束类型有利于性能

让数据传输协议无歧义,简化约定

让两端的代码处理逻辑简化,避免各种异常的问题

严格遵守类型约定,可以规避很多容易被忽视的问题

想一想各种二进制的数据传输协议,类型不是它们特有的

严格来说,JSON不是JavaScript的子集;

JSON: 不要误会,我真的不是JavaScript的子集

"u2028",LINE SEPARATOR,下面的字符被认为是行终止符:

* `u000A` - Line Feed
* `u000D` - Carriage Return
* `u2028` - Line Separator
* `u2029` - Paragraph separator

正因为这两个不可见的Unicode字符,JSON便不是JavaScript的一个子集了,就差了这么一点点;

JSON的高阶应用

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。

MongoDB底层存储为JSON格式;

JSONiq是个构建在XQuery之上的新型查询语言。类似于SQL或是LINQ,它提供了诸如let、for、where、group by与select等语法支持概念;

JSONSelect http://jsonselect.org JSONSelect是一个实验性的JSON选择语言, 她很容易从复杂的JSON文档中访问数据, 看上去就跟CSS一样.

JSONiq http://www.jsoniq.org JSONiq是一个小型而简洁的XQuery语言扩展来提供JSON支持

JsonML http://www.jsonml.org JsonML(JSON标记语言)是应用程序的JSON格式. 它使用基本的JSON数据格式机制并将其应用于XML的表示.

JSON-RPC http://json-rpc.org JSON-RPC是类似于XML-RPC的轻量级远程过程调用(Remote Procedure Call), 它是为简洁而生的.

JSONLint http://jsonlint.com JSONLint是一个JSON验证器和格式化工具.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97591.html

相关文章

  • Jsonp及其实现原理

    摘要:同源策略,它是由提出的一个著名的安全策略,现在所有支持的浏览器都会使用这个策略。客户端在对文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像,但其实并不一样。 参考资料 一、先说说JSON 首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式。 JSON的优点: 基于纯文本,跨平台传递极其简单; Javas...

    TesterHome 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    church 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    xiao7cn 评论0 收藏0
  • 前端开发者手册2019

    摘要:年,和前端开发者与应用程序前端开发者之间产生了巨大的分歧。开发最常见的解决方案有手机和平板的原生应用程序桌面应用程序桌面应用程序原生技术最后,前端开发者可以从浏览器开发中学习到,编写代码不需要考虑浏览器引擎的限制。 前端开发者手册2019 Cody Lindley 编著 原文地址 本手册由Frontend Masters赞助,通过深入现代化的前端工程课程来提高你的技能。 下载:PDF ...

    邹立鹏 评论0 收藏0
  • JavaScript 进阶知识 - Ajax篇

    摘要:注意事项以下版本要设置默认编码,,否则程序可能无法正确显示中文。组成部分协议是对请求和响应的报文内容进行了约束和规范。请求报文请求是由客户端发起,其规范格式为请求行请求头请求主体。 showImg(https://segmentfault.com/img/remote/1460000013696283?w=1920&h=1080); Ajax 前言 前面我们已经学习了js基础知识和一些...

    Dongjie_Liu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<