转载:http://www.cnblogs.com/lengyuhong/archive/2012/01/07/2262390.html

JSON那些事

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

JSON的结构如下:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

一个标准的json格式:

{"name":"jifeng","company":"taobao"}

总体而言,json是相对比较容易的理解和使用的,但同时存在很多的陷阱,如果不注意的话很容易掉进去,本文主要就是讲诉它容易让人犯错的地方。

一、json的的解析方法

json的解析方法共有两种:1. eval() ; 2.JSON.parse()。具体使用方法如下

var jsonstr = '{"name":"jifeng","company":"taobao"}';//eval functionvar evalJson = eval('(' + jsonstr + ')');// JSON.parse functionvar JSONParseJson = JSON.parse(jsonstr);

既然两者都能达到解析json的结果,但这两者有什么区别呢?我用以下的一个例子来进行说明:

1. 用eval方法:

var parse_json_by_eval = function(str){return eval('('+str+')');}

var value = 1;var jsonstr = '{"name":"jifeng","company":"taobao","value":++value}';var json1 = parse_json_by_eval(jsonstr);console.log(json1);console.log('value: '+ value);

执行结果:

{ name: 'jifeng', company: 'taobao', value: 2 }value: 2

2. 用JSON.parse方法

var parse_json_by_JSON_parse = function(str){return JSON.parse(str);}

value = 1;var jsonstr = '{"name":"jifeng","company":"taobao","value":++value}';var json2 = parse_json_by_JSON_parse(jsonstr);console.log(json2);console.log(value);

执行结果:

不能顺利执行,报错

前者能顺利执行,并修改了全局变量value的值,而后者报错了。从上例就可以明显地看出,eval在解析字符串时,会执行该字符串中的代码(这样的后果是相当恶劣的),如上例中,由于用eval解析一个json字符串而造成原先的value的值改变。《高性能Javascript》一书即指出:

警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

一、'\' 对JSON的影响

由于JSON对象是从字符串解析而来,因此在了解 '\' 对JSON影响之前,我们先来了解 '\' 对字符串的影响。这里特别要强调的是在javascript中 ' 和 " 在表示字符串时是等价,比如'a' = "a"

众所周知,由于String数据类型包含转义字符,比如 '\n'表示换行,'\b'表示空格等,因此用表示 he say “hello” 这个字符串时,需要用 '\' 这个特殊字符来表示,即"he say \"hello \"" 。在chrome的中console.log()即可明显的看出。

而JSON.parse()又是对字符串的真实含义进行解析,要表示 \ 必须要用"\\\\"表示,具体见下图:

在json中出现'\'时,必须万分小心,这的确是json中最容易出错的地方

在顺便提一个小插曲:当我知道在json解析时需要用"\\\\"时表示"\"时,你用JSON.parse('{"a":"a\\b"}'),竟然没有报错,难道我理解错了,细心的朋友应该看出来了,'\b'本身就是个转义字符,因此这里的第一个'\'是用来转义第二个'\' ,这样字符串就编程'a\b'('\b'是个转义字符),所以JSON.parse()还是可以顺利解析的。

对这个概念还是有点绕的,读者需要多想想,自己当时也是花了较长的时间来想这个问题。

补充资料:

线上解析json网站:http://json.parser.online.fr/

标签: json, javascript
绿色通道:好文要顶关注我收藏该文与我联系

lengyuhong
关注 - 0
粉丝 - 1

+加关注

1
0
(请您对文章做出评价)

« 博主前一篇:如何让nodejs同步操作

posted @ 2012-01-07 20:01 lengyuhong 阅读(285) 评论(0) 编辑 收藏

刷新评论列表刷新页面返回顶部
发表评论

昵称:

主页:

评论内容: [小提示]新版博问上线
上传图片

不改了  注销  订阅回复

[使用Ctrl+Enter键快速提交]

0 2262390 JSON那些事
简洁阅读版式
首页博问闪存新闻园子招聘知识库
最新IT新闻:
· 回忆的温情,寻找一年前的记忆。
· 创业:Nothing to lose, but everything to gain. – 乔布斯如是说
· 12位技术领袖的新年决心(九)Path的CEO Dave Morin – 鞭笞自己和Path,进入战斗状态
· 平面设计师必备的十个技能
· 七款优秀的Linux时间跟踪软件
» 更多新闻...
最新知识库文章:

· 持续集成之“Everything is code”
· 持续集成之“软件自我识别”
· 持续集成之戏说Check-in Dance
· 什么是闭包,我的理解
· 什么是闭包(Closure)?

» 更多知识库文章...


China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务

json的的解析方法相关推荐

  1. JSON字符串的解析

    2019独角兽企业重金招聘Python工程师标准>>> JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的 ...

  2. Android Json解析方法

    为什么80%的码农都做不了架构师?>>>    关于Json Json:JavaScript Object Notation Json数据是一系列的键值对集合,相对XML体积小 Js ...

  3. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

  4. python json转换字典_Python json转字典字符方法实例解析

    josn基本操作 1.导入import json 2.字典转json:json.dumps(dict,ensure_ascii=False),加,ensure_ascii=False转换之后无中文乱码 ...

  5. java解析json的一种方法

    package com.hanchao.web; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /************* ...

  6. php使用 js格式解析,JavaScript解析JSON格式数据的方法示例

    本文实例讲述了JavaScript解析JSON格式数据的方法.分享给大家供大家参考,具体如下: 1.使用JavaScript提供的eval()函数function JsonText1() { var ...

  7. 解析JSON字串的方法有eval,json_parse,JSON.parse

    解析JSON字串的方法有 (1)var vjson = eval(jsonstr); 缺点:不安全,有可能jsonstr中有恶意脚本,那就麻烦了. (2)var vjson = json_parse( ...

  8. Python中json.loads()无法解析单引号字符串问题的两种解决方法

    问题描述: 数据传输过程中数据存入数据库是将json文件默认转为字符串,所以导致从数据库中取出数据是字符串,需要用loads进行转化,但是转化的时候报错: json.decoder.JSONDecod ...

  9. oracle中多层嵌套命名,一种多层嵌套的json格式数据的命名解析方法

    一种多层嵌套的json格式数据的命名解析方法 [专利摘要]一种n层嵌套的json格式数据的命名解析方法,包括以下步骤:首先,以n层嵌套的json格式数据为基础建立数据源:然后,以键值对为最小单元由外而 ...

  10. iOS基础-数据解析方法初步总结-(XML,JSON欢迎指正)

    小时候的记忆与大家一起分享,愿君安好! 解析的基本概念 解析: 从事先规定好的格式中提取数据 解析的前提: 提前约定好格式,数据提供方按照格式提供数据,数据获取方则按照格式获取数据 OS开发常见的解析 ...

最新文章

  1. gcc: error: CreateProcess: No such file or directory解决方案
  2. C ++中带有示例的llabs()函数
  3. php中文字怎么上下居中,CSS怎么设置垂直居中?
  4. Mysql查询高速缓存区
  5. 参数是html代码,一些html标签的参数messup html/php代码
  6. python35个关键字_Python必须了解的35个关键词
  7. 【毕业设计】基于单片机的指纹识别考勤系统 - 物联网 stm32
  8. 实在小店在B2C平台具有一定的知名度
  9. 2020年安卓各大应用市场份额占比分析
  10. 解析ESX SERVER故障数据恢复方法
  11. Python之selenium进阶
  12. 奥迪Q5更换初装变速箱油教程
  13. SQL宝典(中文版) 高清PDF版下载
  14. 怎么修改网页边框html,DIV+CSS网页布局之边框的设置方法
  15. 倒闭潮不断,众筹的生机在何处?
  16. 【转载】一个硕士程序员的求婚日记——做开发的不是木头人!
  17. 模糊数学 4、模糊模式识别
  18. K2 BPM_【解决方案】从“制造”到“智造”,K2推动制造业转型升级_业务流程管理系统...
  19. 在 vs code 中使用 go 插件时相关工具的正确安装方式
  20. CSS如何实现小三角

热门文章

  1. matlab图片集成成视频
  2. 【Flutter】Dart的方法与箭头函数
  3. Qt编写自定义控件15-百分比仪表盘
  4. 支付宝——(JAVA)支付测试开发
  5. JavaWeb项目架构之FastDFS分布式文件系统
  6. tkinter 弹出窗口 传值回到 主窗口
  7. java单例模式之深入浅出
  8. 利用SQL SERVER 2008 的XML字段类型实现扩展属性
  9. SWT/JFace常用组件----容器类
  10. ubuntu使用笔记一