`
dreamoftch
  • 浏览: 495517 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

json eval

    博客分类:
  • json
阅读更多

http://www.jb51.net/article/21688.htm

如果您想详细了解eval和JSON请参考以下链接:

eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval

JSON:http://www.json.org/

eval函数的工作原理

eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。

举例说明

    eval评估JavaScript表达式

    var bar = 'bar';
    var foobar = eval('"foo" + bar');
    alert(foobar);


    eval评估JavaScript语句

    var bar = 'bar';
    // if variable bar equals 'bar', foobar is the result of
    // last executing statement: bar="foo-bar";
    var foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
    alert(foobar);// change the valuebar = 'foo';
    // now our the last executed statement is: bar = "bar-foo";
    // therefore the value of variable foobar has been changed
    // into 'bar-foo'
    foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
    alert(foobar);


JSON的格式

JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。

举例说明

    对象的字面量

    var objectLiteral = {
      name: "Objector.L",
      age: "24",
      special: "JavaScript",
      sayName: function() {
        return this.name;
      }
    };


    JSON对象

    var jsonFormat = {
      "summary": "Blogs",
      "blogrolls": [
        {
           "title": "Explore JavaScript",
           "link": "http://example.com/"
        },
        {
           "title": "Explore JavaScript",
           "link": "http://example.com/"
        }
      ]
    };


eval和JSON

由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:

    var jsonObject = eval("(" + jsonFormat + ")");


为什么要加括号?

加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

    alert(eval("{}"); // return undefined
    alert(eval("({})");// return object[Object]


JSON格式的名字部分为什么要加引号?

因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。

举例说明

    eval错误解析语义

    alert(eval('{foo:"bar"}'));   // return "bar", incorrect


    eval正确解析JSON

    alert(eval('({"foo": "bar"})')); // return JSON object, correct


结论

理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。

following this format:

eval('{' + jsonString + ')');

分享到:
评论

相关推荐

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

    在处理JSON数据时,`eval()`曾经被广泛用于将JSON字符串转化为JavaScript对象,尤其是在早期JSON还没有成为标准之前。然而,这种方法并不推荐,因为它可能会导致代码注入攻击,特别是当JSON数据来自不受信任的源时。...

    巧用eval解析json对象

    本篇将聚焦于如何巧妙地使用`eval`函数来解析JSON对象,虽然在实际开发中,由于安全考虑我们通常会避免使用`eval`,但理解其工作原理对于学习JavaScript和JSON解析至关重要。 首先,JSON对象本质上是符合JSON语法的...

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

    在JavaScript中,解析JSON数据通常涉及两种主要方法:使用`eval()`函数和使用`JSON.parse()`(在现代浏览器中)。本文主要关注使用`eval()`解析JSON的注意事项,尤其是在结合jQuery进行异步请求的情况下。 首先,让...

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

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

    javascript eval和JSON

    ### JavaScript中的`eval`函数与JSON的理解与应用 #### `eval`函数的工作原理及应用场景 在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript...

    js下用eval生成JSON对象.docx

    然而,当涉及到从服务器端获取JSON数据并将其转换为JavaScript对象时,`eval()`通常被用来解析这些数据。但是,这种方法存在一定的安全风险,因此在实际开发中,推荐使用更安全的JSON.parse()方法。 在描述中提到,...

    javascript中eval解析JSON字符串

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

    javascript中eval解析JSON字符串.docx

    ### JavaScript中eval解析JSON字符串详解 #### 一、前言 在JavaScript开发中,解析JSON字符串是一项常见的任务。其中一种方法是使用`eval()`函数。虽然这种方法并不推荐,但了解其工作原理及其潜在风险仍然非常...

    JSON2.JS JSON.JS JSON_PARSE.JS

    json2.js: This file creates a JSON property in the global object, if there isn't already one, setting its value to an object containing a stringify method and a parse method. The parse method uses ...

    eval 加密和解密

    在JavaScript中,`eval`通常用于处理JSON对象,因为JSON.stringify()方法会将JavaScript对象转换成一个JSON格式的字符串,而JSON.parse()则能将这个字符串解析回JavaScript对象。但出于安全考虑,直接使用`eval`解析...

    json2 json

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

    jQuery方法扩展:type, toJSON, evalJSON

    然而,由于`eval`在安全性和性能上的问题,`evalJSON`现在已被弃用。推荐使用JavaScript内置的`JSON.parse`方法来替代: ```javascript var jsonString = '{"name":"John","age":30}'; var parsedData = $.evalJSON...

    JSON2解决JSON未定义

    在JSON2.js中,它通过使用eval()函数和try/catch语句来实现,尽管这种方法存在一定的安全风险,但在旧版IE中这是唯一的可行方案。 - `JSON.stringify()` 方法则是将JavaScript值转换为JSON字符串。它接受三个参数:...

    json上解析对JSON对象前台获取

    在早期的JavaScript开发中,有时会使用`eval()`函数来解析JSON,但这种方法存在安全风险,因为它会执行任何有效的JavaScript代码。因此,现在不推荐使用`eval()`,而是应该使用`JSON.parse()`。 #### JSON.parse() ...

    json------javascript eval()以及Example

    本文将深入探讨JSON与JavaScript中的`eval()`函数的关系,并通过一个具体的示例来展示它们如何协同工作。 在JavaScript中,`eval()`函数是一个危险但强大的工具,它可以执行一个字符串作为JavaScript代码。在处理...

    JSON的学习总结(总结+源码)

    然而,`eval()` 函数也可以用来解析JSON,但这种方法不推荐,因为它存在安全风险,可能会执行恶意代码。只有在确保JSON字符串来源可信时,才应考虑使用`eval()`: ```javascript let jsonString = '{"name":"John",...

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

    在处理JSON字符串时,通常有两种方法将其转换为JavaScript对象:`JSON.parse()`和`eval()`函数。`JSON.parse()`是现代浏览器内置的方法,专门用于解析JSON字符串,它是安全且推荐的解析方式。然而,在一些老版本或者...

    Ajax中使用JSON传输数据

    例如,`eval()`或`JSON.parse()`函数可以用来解析JSON字符串为JavaScript对象: ```javascript var responseText = '{"name":"张三","age":30,"city":"北京"}'; var data = JSON.parse(responseText); console.log...

Global site tag (gtag.js) - Google Analytics