【问题标题】:How do I convert a JSON string to a JavaScript object in jQuery?如何在 jQuery 中将 JSON 字符串转换为 JavaScript 对象?
【发布时间】:2009-05-28 15:12:11
【问题描述】:

我的数据库中有一个字符串,我想将其拉入我的页面并转换为 JavaScript 对象。

[
{id: 1,title: "Long Event",
       start: new Date(2009, 5, 6, 14, 0),end: new Date(2009, 5, 11)},
{id: 2,title: "Repeating Event",
       start: new Date(2009, 5, 2)},
{id: 3,title: "Meeting",
       start: new Date(2009, 5, 20, 9, 0)},
{id: 4,title: "Click for Facebook",
       start: new Date(2009, 5, 27, 16),end: new Date(2009, 5, 29),
       url: "http://facebook.com/"}
]

如何使用 jQuery 做到这一点?

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

从 jQuery 1.4.1 开始,您可以在本地执行此操作

jQuery.parseJSON

jQuery documentation

【讨论】:

  • 完美回答了OP的问题。
【解决方案2】:

“官方”json2.js 脚本包含 2 种方法:一种可以安全地将任何 JSON 字符串解析为对象(JSON.parse),另一种可以将对象转换为 JSON 字符串(JSON.stringify)

脚本可以在here找到。

在我上面的帖子中,我建议使用 eval(),但实际上有一种更好的方法来评估 JSON(如果您不想使用 json2.js 脚本):

var obj = (new Function("return " + json))();

使用 json2.js 脚本:

var obj = JSON.parse(json);

【讨论】:

  • 现在大多数浏览器都包含原生 JSON 对象,因此不再需要包含 json2.js。只需使用JSON.parse(string)JSON.stringify(object)
【解决方案3】:

eval() 怎么样?

var obj = eval(jsonString);

【讨论】:

  • 通常使用 eval 不是一个好主意,除非绝对没有其他方法可以实现手头的目标。
  • 您说得有道理,但风险很小。大多数时候,您正在评估由您自己的服务器代码生成的 JSON,这绝不会带来安全风险?甚至 jQuery 也会调用 eval() 将 ajax JSON 转换为对象。
  • 最简单的解决方案就是最好的解决方案。如果你知道你正在解析的 JSON 的来源,我认为 eval 将是最好的选择。
【解决方案4】:

看看JQuery-json插件

var thing = {plugin: 'jquery-json', version: 1.3};

var encoded = $.toJSON(thing);              //'{"plugin": "jquery-json", "version": 1.3}'
var name = $.evalJSON(encoded).plugin;      //"jquery-json"
var version = $.evalJSON(encoded).version;  // 1.3

【讨论】:

    【解决方案5】:

    你看过jquery-json插件吗?

    【讨论】:

      【解决方案6】:

      使用

      jQuery.getJSON(url, data, callback)

      或将“json”作为type parameter: <pre>jQuery.get( url, data, callback, type )</pre>传递

      同样适用于:

      jQuery.post(url, data, callback, type)

      *如果您从 ajax 请求中获取“字符串”

      【讨论】:

        【解决方案7】:

        虽然您可以使用 eval 命令,但您需要先检查它的安全性。我用:

        var data = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.
                   test(source.replace(/"(\\.|[^"\\])*"/g, '')))     
                   && eval('(' + source + ')');
        

        这应该可以(它已从原始版本中进行了一些调整)。关键是检查 JSON 字符串以防止函数和其他实际可执行代码偷偷溜进来。 (第一个正则表达式很重要)。

        也就是说,JSON 插件非常好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-16
          • 1970-01-01
          • 1970-01-01
          • 2017-05-05
          • 1970-01-01
          • 2012-08-28
          相关资源
          最近更新 更多