1 .背景介绍什么是JSON
JSON(JavaScriptobjectnotation,JS对象标记)是一种轻量级数据交换格式。 它基于ecmascript(w3c制定的js规范)的子集,以完全独立于编程语言的文本格式存储和表示数据。 简洁清晰的分层结构使JSON成为了理想的数据交换语言。 人容易读写,同时也容易分析和生成机器,有效地提高网络传输效率。 ——百度百科
数据传输是我们敲击代码时经常遇到的场景,前后进行交互。 给数据统一的格式有助于数据的创建和分析。
json是一种广泛用于与后端进行数据交换的数据格式。
JSON的诞生
JSON是JavaScript Object Notation,JS对象标记,是一种数据交换格式。 在JSON出现之前,大家都在用XML传递数据。 XML是纯文本格式,因此非常适合在网络上交换数据。 XML本身并不复杂。 但是,添加DTD、XSD、XPath、XSLT等复杂的规范,普通软件开发人员一接触XML就会变大,最终发现即使努力研究了好几个月,XML的规范也未必清晰。
终于,在2002年的一天,哈德福克(Douglas crockford )陷入困境的同时,为了拯救被某大型软件企业长期愚弄的软件工程师,他推出了名为JSON的轻量级数据交换表单
因为JSON非常简单,所以很快就风靡了Web世界,成为了ECMA标准。 大多数编程语言都有解析JSON的库,但JavaScript具有内置的JSON分析,因此可以直接在JavaScript中使用JSON。 将任何JavaScript对象序列化为JSON格式的字符串,以便可以通过网络将其传递到其他计算机。 收到JSON格式的字符串后,只需将其反序列化为JavaScript对象,即可直接在JavaScript中使用该对象。
转义
当我们调用jsonp接口或调用js文件时,如果文件的编码不同,就会出现乱码问题。 如果你的文件中出现了非英语字符,如果调用时文件的编码不一致,也会出现乱码。
所以统一并格式化数据。
JSON是适用于Ajax APP应用的有效格式,因为它是用于在JavaScript对象和字符串值之间快速转换JSON的语法
JSON是提供stringify和parse方法的内置对象
stringify将js对象转换为符合json标准的字符串
parse将符合json标准的字符串转换为js对象
2 .知识分析JSON对值的类型和格式有严格的规定
复杂类型的值只能是数组或对象,而不是函数、正则表达式对象或日期对象。
简单类型的值只有四种:字符串、数字(必须用十进制表示)、布尔值和null。 不能使用NaN、Infinity、-Infinity和undefined。
字符串必须用双引号表示,不能使用单引号。
对象的键名必须用双引号引起来。
数组或对象的最后一个成员后面不能包含逗号。
在PS:中,必须注意null数组和null对象都是有效的JSON值,null本身也是有效的JSON值。
JSON 的语法规则
Jon的语法规则非常简单,可以说是“优雅完美”。 总结如下。
数组(Array )用方括号([] )表示。
对象(Object )用大括号()、)和()表示。
“名称/值对”(name/value )与数组和对象合并。
名称(name )用双引号括起来,值)包括字符串、数字、布尔值、null、对象和数组。
用逗号(,)分隔排列的数据
实例
Jon数据的写入格式为名称/值对。
名称/值对组合中的名称写在前面,写在双引号中,值对写在后面,中间用冒号分隔。
其中,值可以是数字(整数或浮点数)、字符串(用双引号括起来)、布尔值(true或false )、数组(用方括号括起来)、对象(用大括号括起来)或null
varjson={'password':123456,' name':'myname ',' Booleans':true,' array ' 3360 [ x,y,z],'。
或者嵌套使用
转义概述
为什么需要转义? js通过我们使用的js对象进行处理,但与后端数据交换时发送规定的json格式的字符串。 因此,在向后端发送或接收数据时,必须对其进行转义
{name:'myname ',password:123456}
' { ' name ' : '我的名字',' password':1234
56}"其中json字符串转js对象,调用parse方法:
js对象 = JSON.parse(json字符串);
js对象转json字符串,调用stringify方法:
json字符串 = JSON.stringify(js对象);
3.常见问题在json字符串转换成对象,还有eval_r('('+json字符串+')')这个方法,但是在对目标数据进行读取时,可能会出现一些意外的错误:
4.解决方案
原因:eval_r获取的json对象的值中,如果有执行代码,也将照样执行!所以若不能保证数据的安全性,不要使用eval_r方法进行转义。
5.编码实战
下面是一个简单的json数据发送应用,有兴趣可以阅读一下:
6.扩展思考
我们常看到
{name:"myname",password:123456}
和
{"name":"myname","password":123456}
这样两种格式,即js对象和json,然而js对象和json有什么不一样的地方?
很多人搞不清楚 JSON 和 Js 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
如
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
7.参考文献
参考一:JSON官方文网
参考二:Json对象和Json字符串的区别
参考三:json属性名必须加引号的讨论
参考四:json怎么理解
8.更多讨论1、XML是什么?
XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML的宗旨传输数据的,而与其同属标准通用标记语言的HTML主要用于显示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。
2、向后台传输数据要用什么格式?
json字符串格式,如果是一个对象要先用JSON.stringify()转义,转义成为字符串才能将数据传给后端。
3、后端传过来的字符串数据要怎样才能转义成为一个对象?
用JSON.parse()方法转义。