代码之家  ›  专栏  ›  技术社区  ›  Alec Smart

分析JSON字符串

  •  3
  • Alec Smart  · 技术社区  · 15 年前

    我有一个硬编码的JSON字符串。

    var test = "JSON STRING HERE";
    

    我正在使用jquery。我知道有一个类似getjson的函数,但是它会发出一个ajax调用。我希望它解析硬编码字符串以便使用 $.each(test, function(a,b){}))

    谢谢你抽出时间。

    4 回复  |  直到 15 年前
        1
  •  11
  •   Gabriel Hurley    15 年前

    原始问题:

    jquery强调不包括可公开访问的JSON解析器或编码器。他们想让你用第三方图书馆。

    我建议在json.org上托管一个:

    https://github.com/douglascrockford/JSON-js/blob/master/json2.js

    或者,您可以使用托管在Google代码上的jquery json插件:

    http://code.google.com/p/jquery-json/


    在回答“为什么jquery不让它的解析器可用?”:

    jquery实际上不包含任何类型的解析器。在jquery代码库的ajax部分中,您实际上可以看到它们在做什么。 lines 572-579 .

    快速版本是,他们实际上会检查您是否包含了一个外部JSON库,比如json.org中的库,如果找到了,他们会使用这个库进行解析。如果您没有包含一个,那么它们将返回包装在函数中的JSON,有效地将其返回以进行评估。很狡猾,但很聪明!

        2
  •  5
  •   inkredibl    15 年前

    你们知道JSON是“javascript对象表示法”吗?如果您有硬编码的javascript对象表示法,那么只需松开引号,就可以完成解析,因为javascript解析器会处理这个问题。

    var jsonstr = "{prop1: 'val1', prop2: 'val2'}";
    var parsed = {prop1: 'val1', prop2: 'val2'};
    

    很简单,不是吗?!!!可能有些事情我不知道,但对我来说,很难理解人们用JavaScript为JavaScript编写解析器…当然,如果您不确定JSONSTR源代码的安全性,那么直接评估它可能不是最好的主意,但是如果您和只有您控制源代码,特别是如果您像问题中所说的那样对其进行硬编码,那么就松开引号!

        3
  •  1
  •   August Lilleaas    15 年前

    以下是jquery在ajax请求中在数据类型设置为“json”时所做的操作(这是getjson在hood下所做的操作):

    window["eval"]("(" + data + ")");
    
        4
  •  0
  •   Daff    15 年前

    不幸的是,jquery不支持将json或jsonp作为数据类型的ajax函数外部的json解析(反序列化与ajax和回调代码紧密绑定)。你当然可以做一个

    var obj = eval(test);
    

    但这绝对不是推荐的方法(除非您确定您的字符串只是一个javascript对象,而不是要执行的任意源代码)。所以最好的方法可能是使用另一个像 JSON2 library (发现) json.org )