早已有太空没有宣布小说更新了,严重背离了温馨定好的“周周至少宣布一篇小说”的安插。因为是在太忙了,朝九晚九的,有时下班回家就一向上床(感觉给协调找了有些借口==||)。好了,废话不多说了,来看正文。

1. 什么是JSON?

什么样是JSON?记得刚初阶接触JSON这一定义的时候是在大三的时候,由于要求将数据从WEB服务器后台传递到页面中,比如,须求将一个名为name的属性值传递到页面,当然,那很平凡、很简单。不过,假使我要传递很多多少,很多有社团性的数量,比如是一个实体类的数量,或者说是数据库中的一条记下,这要怎么传递到前者页面吗?其实,在绝大所数的异步请求下,都会采纳JSON那种数据格式来已毕,对于部分比较单纯的多寡则可以利用框架自带的效应如故利用像EL/ONGL等看似的标记性语言。当然,那里仍旧强调一下JSON那种数量格式。

JSON(Javascript Object
Notation)
是一种轻量级的数目格式,完全独立于言语的文本格式,也就是说整个JSON文档就是一个文本文档,所以JSON是一种优质的数据调换格式。在非关系型数据库中,也能看到JSON的人影,比如在MongoDB中,也使用了一连串似JSON的多寡格式,然则它叫BSON。JSON在Javascript中处理是不须要额外的API或者工具包的,所以效能更加高。

2. JSON数量格式

  1. 牢记,JSON不是一种语言,只是一种多少格式。那种格式在存储的时候最多终于一个字符串数据而已。
  2. 上边简要介绍一下JSON的多寡格式规范

demo1 = {}                          //空数据
demo2 = {"key":"value"}             //JSON是一种键值对的集合格式,每个键对应一个值
demo3 = {"key":[1,2,3]}             //JSON中可以存储数组元素
demo4 = {                           //JSON中可以存储无限个键值对数据 
            "key1":"value1",
            "key2","value2"
         }
demo5 = {                           //理论上,JSON可以进行无限次的嵌套
           "key1":"value1",
           "key2":{
                     "key3":"value3",
                     "key4":"value4"
                  }
         }
3. JSON在Javascript中的解析方法

在Javascript中,主要使用以下七个方法来解析JSON数据:

eval() 和 JSON.parse()

骨干的施用形式如下:

var jsonstr = '{"name":"jifeng","company":"taobao"}';

//eval function
var evalJson = eval('(' + jsonstr + ')');

//json.parse function
var jsonParseJson = JSON.parse(evalJson);
4. JSON.parse() 和 eval()的区别

在代码中使用eval()是充足危急的,因为eval()在解析字符串时,会执行该字符串中的代码,越发是用它实施第三方JSON字符串时,可能带有有恶意代码。而JSON.parse()方法分析字符串本身。使用JSON.parse()可以捕捉JSON中的语法错误。

var jsonStr = {"key":"demo","key2":"demo"};

var jsonObj1 = JSON.parse(jsonStr);            //使用JSON.parse()解析JSON,不会执行jsonStr中的代码
var jsonObj2 = eval('('+jsonStr+')');          //会执行jsonStr中的代码,非常不安全

var errJson = {'error json format example'}    //这是一段错误的JSON格式的数据

var jsonObj3 = JSON.parse(errJson);            //控制台下会报错并显示堆栈信息
var jsonObj4 = eval('('+errJson+')');          //控制台下不会报错,jsonObj4 = undefined
5. 谈谈Javascript在解析JSON时存在的坑

1 转义字符:数据我存在需求选取转义字符才能代表的字符

在Javascript中,有一个转义字符就是\\,能够说对于从未深刻接触过JSON的新手来说,很几乎率上会踩那么些坑。比如您的JSON数据是其一样子的:

{"key1":"\"demo\""}

就这几个格式的数额,在服务端程序中象征的时候是不成难题的,数据本身就富含双引号,所以那边运用到了转义字符\\,然则在Javascript中就充足了,Javascript是不容许出现其余转义字符的。这假若真的要存储须求转义字符才能兑现的数据时,比如数据我就隐含双引号,那么那个时候真么解决吧?我想一个相比较土的章程就是先替换掉JSON字符串中的所有须求使用转义字符表示的字符,然后再开展辨析,解析落成后再将原本的字符替换回去。

var demo = "{"key":"value\""}";        //带有双引号的JSON数据
var dealDemo = demo.replace('\\','-');      //将数据中的'\'转化为'-'
var jsonDemo = JSON.parse(dealDemo);        //解析JSON数据
var data = jsonDemo.key.replace('-','\\'); //将双引号替换回去

本来,那种办法也不是有弊端的,那就是您的json数据本身不可能出现-其一字符。

2 数字&字符串

这些题材自己也是目前才发觉的(小编也是踩坑过来的=.=)。先来看个大约的例证:

//假设某类型的数据有不同的值,可以单个值,也可以多个值,多个值是使用逗号隔开
var json1 = {"key":"tag","key1":1} ;
var json2 = {"key":"tag","key1
![257251_1455763624_2481.png](http://upload-images.jianshu.io/upload_images/1784374-bfb508453e93788b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
":"1,2"}

//遍历JSON数据集合,同时解析其value值,将其分开
var demo = JSON.parse(json1);
var value = demo.tag;
var values = value.split(',');

//对于json2,是正常的,得到的values = [1,2]
//对于json1,则报错了,原因是Javascript把'1'看成数字了,数字没有split这个方法

//解决方式:
//将value强制转化为字符串
var str = new String(value);            //这样对于json1的数据就不会报错了

因而,对于JSON,我觉得格式统一很重点,并且为其value全体加上引号,这样规范后,可以让前者少踩一些不必要的坑。

{"键名称有引号":"键值也有引号"}
{"key":"value"}
{"tag":"1"}

//不推荐这种:
{"tag":1}

文章更新日志:

2016-07-17 19:01 《谈谈JSON那些事》初稿

相关文章

网站地图xml地图