你如何解析非常好的JSON(可能使用jQuery)

除了使用eval之外,有没有办法解析NON格式良好的JSON?

背景是,我正在使用数据标记值来绘制如下图形:

 

这与数值完美配合,这些值直接在jQuery数据中作为数组提供,无需在此处解析JSON。

但是,对于标签,要传递字符串数组。 eval可以很好地解析sdata的字符串,但是JSON.parsejQuery.parseJSON失败了,因为它没有很好地形成JSON。

 var $data = $("#data").data(), values; // use eval out("#out", eval($data.sdata)); // works... // use JSON.parse try { values = JSON.parse($data.sdata); } catch(e) { // silent catch } out("#out1", values); // values is undefined 

我把JsFiddle放在这里检查一下。

你得到错误,因为['foo','bar','baz']包含单引号。 JSON RFC指定string应用双引号括起来。

可能会有一些解决方法。

data-属性中切换引号:

  

或者在Javascript中替换:

 values = JSON.parse($data.sdata.replace("'","\"")); 

你不需要解析。 只需使用.data() ,该function就可以为您完成。

我已经更改了你的HTML,我在行data-sdata="['foo', 'bar', 'baz']"交换引号data-sdata="['foo', 'bar', 'baz']"因为JSON应该用于双引号( " )标记。

HTML

 

脚本

 out("#out1", $("#data").data('idata')); out("#out2", $("#data").data('sdata')); 

DEMO

当然,您无法轻松解析100%的损坏数据,这适用于任何数据格式而不仅仅是JSON。

如果数据格式错误的原因总是相同的,您应该使用一些str_find和替换函数来修复它。

如果它是不规则的,除了编写一个真正的智能和大算法之外你没有真正的机会。 这里最好的方法是尝试从损坏的字符串中提取真实的原始数据,并使用有效的语法构建一个真正的JSON字符串。

尝试

HTML

 
out1
out2

JS

 $(function () { var out = function (outputId, elem, dataId) { return $.each(JSON.parse($(elem).get(0).dataset["" + dataId]) , function (index, value) { $("
    ").html("
  • " + index + " -> " + value + "
  • ") .appendTo(outputId); }); }; out("#out1", "#data", "idata"); out("#out2", "#data", "sdata"); });

jsfiddle http://jsfiddle.net/guest271314/4mJBp/