`

eval函数解析json数据的小细节

 
阅读更多

关于json数据在客户端使用程度比较频繁,与服务器交互使用json数据可以大大减少通讯数量,免除像xml那样携带大量的标签信息。在java开发领域,用来生成json格式字符串的jar包有官方的org.json.jar和sourceforge的那个json-lib,个人觉得官方的使用简明易懂,可以将bean和collection之类对象解析成json的数据格式字符串。在服务器解析生成json是相当简单的事情,其实在客户端解析并生成json对象也是相当容易的事情。

        首先值得我们关注的是历史悠久的prototype.js框架,这个框架拓展了String的prototype,增加了evalJson方法可以方便地将json格式的字符串转化成json对象。像jQuery内部也封装了一个parseJSON方法,实现转化功能。出于性能和维护性的考虑,有些情况下我们想直接使用更为轻巧的代码转化json对象,出于浏览器的兼容性能方面考虑,可以使用官方的json.js框架。这里就提出了一个问题,为什么我们不能直接用javascript内置的函数来解析json格式字符串呢?从犀牛一书我们可以知道,定义一个对象,可以用大括号{}来定义并实例化生成一个新对象,而json正式利用这个特性来构造数据结构。而官方json的定义是

 

所以我们可以知道json返回数据基本格式是使用键值对形式,对此我们要知道关注的是在规范里面最为key的形式的string需要用双语号或单引号围绕起来。

        从javascript的核心函数中我们知道有一个eval函数可以解析字符串形式的语句块,所以我们完全可以让eval来解析我们的json数据格式的字符串,因为我们的json就是利用对象字面值(Object Literals)来定义并实例化包含我们编写指定属性(类似键值对)的对象。所以我们完全可以直接将符合json格式的字符串作为参数传给eval,即可返回符合json规范的对象。但当我们解析的字符串是单个对象的的形式,即是是{x:1,y:2}这种形式的字符串,我们不能直接传递给eval解析。因为javascript内核函数eval解析这字符串时候,把这个字符串当做javascript语句块来解析,而恰巧x:和y:在javascript语言中符合label的定义格式。什么是label呢,就在再在个地方标记一下,然后可以给goto语句跳到标记label处运行。所以我们必须想办法来解决这个问题,不让javascript核心在解析这个语句时候将这个x:形式的字符串当做是一个label。(ps:李刚老师的疯狂java-突破程序员基本功的16课也提及到类似的问题,就是在java源码上写上http://www网址也正常编译)。

让我们比较两种解析代码:

[javascript] view plaincopyprint?
  1. var jStr = "{x:1,y:2}";  
  2. var v1 = eval(jStr); //解析错误  
  3. var v2 = eval("("+jStr+")"); //解析正确  


从上面代码我们可以了解到,单个对象形式要在包含对象定义的字串前后加小括号包围起来(数组的json对象则没问题[{x:1,y:2},{x:1,y:2}]),才能正确解析。所以小括号是解决问题的关键,我们有必要了解一下小括号在javascript里面的作用。

小括号有下面五种用法:

  1. 函数声明时参数表:function func(arg1,arg2){.....}
  2. 和一些语句联合使用以达到某些限定作用(语句结构): for(var in obj){.....}
  3. 和new一起使用用来传值(实参):var p1 = new Person('Jack',26);
  4. 作为函数或对象方法的调用运算符(如果定义了参数也可与语义3一样传实参):func(); obj.func();
  5. 强制表达式运算 起到强制()内部内容必须解析成表达式,这就是我们的用eval来进行json字串解释的关键所在。
分享到:
评论

相关推荐

    javascript中eval解析JSON字符串

    我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...

    使用PHP解析JSON数据1

    二、主要技术本案例主要在PHP中使用JavaScript内置的eval()函数对JSON数据进行解析并将解析内容显示在页面中 三、效果图展示实现效果图,如图1所

    JS使用eval解析JSON的注意事项分析

    使用eval函数来解析,并且使用jquery的each方法来遍历 用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器 返回JSON形式的字符串的形式,对于利用...

    jquery eval解析JSON中的注意点介绍

    使用eval函数来解析,并且使用jquery的each方法来遍历 用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用...

    js使用eval解析json(js中使用json)

    eval的用法eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句,下面给出eval解析json的示例

    js解析json字符串的库

    一个在js中解析json字符串为json对象的库, 在js中 使用 var json = json_parse('json...json就是解析后的json对象,比较方便的避免eval函数。如果不想引入其他过多的js库,那么使用这个库解析json字符串还是蛮方便的

    js使用eval解析json实例与注意事项分享

    eval函数在js中有不少用处了,下面我来给各位朋友介绍eval解析json的实例,基于这个实例我们引出来在eval处理json数据时的一些注意事项,希望文章对各位同学会有所帮助

    JS解析json格式字符串

    JS解析json格式字符串最简便方法,利用javaScript内置eval函数来实现

    JS中Eval解析JSON字符串的一个小问题

    我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用eval() 函数。 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。...

    js解析与序列化json数据(一)json.stringify()的基本用法

    ECMAScript 5对解析JSON的行为进行了规范,定义了全局对象JSON。 JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生...

    JavaScript解析JSON格式数据的方法示例

    本文实例讲述了JavaScript解析JSON格式数据的方法。分享给大家供大家参考,具体如下: 1、使用JavaScript提供的eval()函数 function JsonText1() { var strJSON = "{'Name':'Kevin','Age':'23'}"; //得到...

    json2 json

    使用thisfile recommended.json_parse.js:该文件包含替代JSON的parse函数thatuses递归下降而不是eval.json_parse_state.js:此文件包含替代JSON的parse函数thatuses状态机器代替eval.cycle.js:这个文件包含了两个...

    json2 js json格式处理包

    parse方法使用eval方法进行解析,并使用几个正则表达式对其进行保护意外的代码执行风险。在当前的浏览器上,这个文件什么都不做,更喜欢内置的JSON对象。没有理由使用这个文件,除非命运迫使你支持IE8,这是没有人...

    json的介绍 以及 json2.js的用法

    JSON stringifier进行反向操作,可以把JavaScript数据结构转换为JSON文本。JSON不支持循环数 据结构,因此应小心不要为JSON stringifier提供循环结构。 使用格式: var myJSONText = JSON.stringify(myObject, ...

    JavaScript转换与解析JSON方法实例详解

    本文实例讲述了JavaScript转换与解析JSON方法。分享给大家供大家参考,具体如下: json格式数据如下: var json = { 'jquery': [{ "id": "1", ...javascript解析json数据: [removed] = function() { var json = { "C

    js中把JSON字符串转换成JSON对象最好的方法

    用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里...

    Android WebView交互传递json字符串并解析的方法

    传递json和传递String数据是一样的,关键就是HTML5端对json数据通过eval()函数进行解析 传递过程中android端调用的最重要的一个函数就是: addJavascriptInterface(new MyObject(this,”dd”),”my”); 这...

    JavaScript解析及序列化JSON的方法实例分析

    JSON 之前的 XML 数据结构要被解析,需要先解析成 DOM 文档,然后再从中提取出数据。相比之下,JSON 数据结构方便多咯O(∩_∩)O~ 所以 JSON 就成为 web 开发中,用于数据交换的事实标准。 1 JSON 对象 早期的 JSON ...

Global site tag (gtag.js) - Google Analytics