你如何解析非常好的JSON(可能使用jQuery)
除了使用eval
之外,有没有办法解析NON格式良好的JSON?
背景是,我正在使用数据标记值来绘制如下图形:
这与数值完美配合,这些值直接在jQuery数据中作为数组提供,无需在此处解析JSON。
但是,对于标签,要传递字符串数组。 eval
可以很好地解析sdata
的字符串,但是JSON.parse
和jQuery.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"); });