关于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网址也正常编译)。
让我们比较两种解析代码:
- var jStr = "{x:1,y:2}";
- var v1 = eval(jStr);
- var v2 = eval("("+jStr+")");
从上面代码我们可以了解到,单个对象形式要在包含对象定义的字串前后加小括号包围起来(数组的json对象则没问题[{x:1,y:2},{x:1,y:2}]),才能正确解析。所以小括号是解决问题的关键,我们有必要了解一下小括号在javascript里面的作用。
小括号有下面五种用法:
- 函数声明时参数表:
function
func(arg1,arg2){.....}
- 和一些语句联合使用以达到某些限定作用(语句结构):
for
(
var
a
in
obj){.....
}
- 和new一起使用用来传值(实参):
var
p1 =
new
Person(
'Jack'
,26);
- 作为函数或对象方法的调用运算符(如果定义了参数也可与语义3一样传实参):
func(); obj.func();
- 强制表达式运算 起到强制()内部内容必须解析成表达式,这就是我们的用eval来进行json字串解释的关键所在。
分享到:
相关推荐
本篇将聚焦于如何巧妙地使用`eval`函数来解析JSON对象,虽然在实际开发中,由于安全考虑我们通常会避免使用`eval`,但理解其工作原理对于学习JavaScript和JSON解析至关重要。 首先,JSON对象本质上是符合JSON语法的...
1. **通过`eval()`函数解析JSON字符串**: 当服务器返回JSON字符串,而jQuery异步请求没有指定数据类型或以字符串形式接收时,我们可以使用`eval()`函数将其转换为JavaScript对象。但请注意,`eval()`是危险的,...
在JavaScript和jQuery中,解析JSON数据是常见的任务,特别是在与服务器进行异步通信时。JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和写入数据。当jQuery从服务器...
总结来说,这个示例展示了如何在PHP环境中使用JavaScript的`eval()`函数解析JSON数据,并将数据以层次结构的形式展示在HTML页面上。这种方法对于处理从服务器获取的JSON数据,或者在客户端和服务器之间交换数据时...
需要注意的是,虽然`eval()`函数可以用来解析JSON字符串,但它并不被推荐作为解析JSON的标准方法,原因在于它会执行任何传入的字符串中的JavaScript代码,这可能会带来安全风险。例如,如果`data1`来源于不可信的...
因此,使用eval函数解析JSON数据之前,一定要确保数据的安全性。 2. 在使用eval函数时,需要将JSON字符串用一对圆括号"()"包起来,这是因为在JavaScript中,如果紧跟在"{"后面的是一个标识符,那么它就不会被解释为...
它的功能是将字符串作为代码执行,这在处理动态生成的代码或者解析JSON数据时尤为有用。本篇文章将深入探讨`eval()`函数的一些用法,并结合源码分析其工作原理和潜在的安全风险。 一、`eval()`函数的基本概念 `...
### JavaScript中eval解析JSON字符串详解 #### 一、前言 在JavaScript开发中,解析JSON字符串是一项常见的任务。其中一种方法是使用`eval()`函数。虽然这种方法并不推荐,但了解其工作原理及其潜在风险仍然非常...
因此,现代JavaScript开发通常避免使用`eval()`来解析JSON,而是采用`JSON.parse()`函数,它是专门为解析JSON设计的,既安全又高效: ```javascript var data = '{"key": "value"}'; var json = JSON.parse(data); ...
我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...
使用eval函数来解析,并且使用jquery的each方法来遍历 用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用...
例如,`eval()`或`JSON.parse()`函数可以用来解析JSON字符串为JavaScript对象: ```javascript var responseText = '{"name":"张三","age":30,"city":"北京"}'; var data = JSON.parse(responseText); console.log...
在这两种方法中,使用eval函数解析JSON需要特别注意一些事项,以避免潜在的安全风险和执行错误。 首先,使用eval()函数解析JSON字符串是一种方法,但是这种方法存在安全风险,因为它可以执行字符串中的任意代码,...
通过本文的介绍,我们可以了解到`eval`函数在处理字符串形式的JavaScript代码方面的强大功能,以及在JSON数据转换过程中的应用。同时,我们也应该注意到在实际项目中避免滥用`eval`的重要性,尤其是在处理用户提交的...
一个在js中解析json字符串为json对象的库, 在js中 使用 var json = json_parse('json...json就是解析后的json对象,比较方便的避免eval函数。如果不想引入其他过多的js库,那么使用这个库解析json字符串还是蛮方便的
- **JSON字符串转为JSON对象**:在JavaScript中,可以使用`eval()`函数(不推荐,因为有安全风险)或`JSON.parse()`方法将JSON字符串转换为JSON对象。 ```javascript var str = '{"name": "cxh", "sex": "man"}';...
接下来,我们讨论`eval()`的另一个常见用途——解析和执行JSON数据。由于JSON是JavaScript的一个子集,我们可以使用`eval()`快速地将JSON字符串转换为JavaScript对象,但这同样存在安全隐患。最佳实践是使用`JSON....
4. **解析JSON数据**:现在,使用ScriptControl对象调用JSON.parse()方法来解析JSON字符串。 ```vbscript Dim parsedData parsedData = jsonCtrl.Eval("JSON.parse('" & strData & "')") ``` 5. **处理解析后的...