【问题标题】:Parsing JSON data without quotes with jQuery使用 jQuery 解析不带引号的 JSON 数据
【发布时间】:2011-12-23 15:58:18
【问题描述】:

我正在尝试使用通过 AJAX 从远程服务器获取的 jQuery 解析 JSON。 JSON 数据类似于:{identifier:"ID", label:"LABEL"} 但不能。显然,字段标识符和标签没有双引号。在我的本地测试站点上使用双引号进行测试时,它可以工作。

可以在没有引号的情况下使用 jQuery 吗?我四处寻找并没有找到解决方案。

感谢任何输入。谢谢。

【问题讨论】:

  • 不能正确格式化 JSON 吗?
  • 我猜你无法控制远程服务器?传递错误的 JSON 是他们应该解决的问题,即使您无法控制该服务器(给他们发电子邮件?)。你能发布一个糟糕的 JSON 的例子吗?如果您绝对无法更改 API,也许有正则表达式修复或快速而肮脏的东西。
  • 恐怕你必须使用 eval
  • 你必须在客户端做吗? Jackson 可以为您读取这种格式错误的 JSON,但它是 Java 和服务器端的。
  • 你可能已经从之前的 cmets 中猜到了,但是开发者喜欢钝,所以这里很明显:这不是有效的 JSON。创建一个 hack 来读取无效的 JSON 不是一个好方法。您应该首先获得有效的 JSON。

标签: jquery ajax json


【解决方案1】:

是的,它不是有效的 JSON,blahblahblah...就像每个人都关心它是否有效。

至少我不关心,我只是想解析它,所以我写了jsonlite。

使用Jsonlite,您可以这样做:

var s = '{name: jsonlite, birthday: {year: 2013, month: 7, day: 7}, isGreat: true}';
var obj = jsonlite.parse(s);

产生的结果与下面的代码完全相同:

var s = '{"name": "jsonlite", "birthday": {"year": 2013, "month": 7, "day": 7}, "isGreat": true}';
var obj = $.parseJSON(s);

【讨论】:

  • 不错的一个:) 'blahblahblah' +10 :D
【解决方案2】:

你不能。 JSON 规范是这样说的:

A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java string.

含义字符串作为您提到的标签。

来源:http://www.json.org/

【讨论】:

    【解决方案3】:

    使用正则表达式可以使无效的 JSON 变为有效的 JSON。 在下面的示例中,sFixed 将是有效的 JSON,可以解析:.

    let s = '{identifier:"ID", label:"LABEL"}',
        sFixed = s.replace(/(['"])?([a-zA-Z0-9_][a-zA-Z0-9_\s]*[a-zA-Z0-9_])(['"])?:/g, '"$2": '), //'{"identifier":"ID", "label":"LABEL"}'
        obj = JSON.parse(sFixed);
    

    【讨论】:

    • 单独的代码块并不能提供好的答案。请添加解释(为什么它解决了问题,错误在哪里等等......)
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2011-07-04
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多