在javascript中,我需要将一个字符串解析为javascript数组的等价物,例如:
[["2016-12-21",101.58],["2016-12-22",209.56]]
我拥有的数据,以及我解析它和错误消息的尝试如下所示:
str = "[["2016-11-17",771.22998],["2016-11-16",764.47998],["2016-11-15",758.48999],["2016-11-14",736.080017],["2016-11-11",754.02002],["2016-11-10",762.559998],["2016-11-09",785.309998],["2016-11-08",790.51001],["2016-11-07",782.52002],["2016-11-04",762.02002],["2016-11-03",762.130005],["2016-11-02",768.700012],["2016-11-01",783.609985],["2016-10-31",784.539978]]"
JSON.parse(str)
Uncaught SyntaxError: Unexpected token & in JSON at position 2(…)
我试图从字符串中删除一些特殊字符(&,#,;等),这稍微改变了错误信息,但我从来没有能够得到我的最终结果。我想我会从头开始将它放在stackoverflow中,因为最有可能是一个比我尝试的更好的从头到尾的解决方案。
答案 0 :(得分:2)
天真,
JSON.parse(str.replace(/"/g,'"'));
会起作用,但你应该弄清楚为什么你的双引号会变成HTML实体。
答案 1 :(得分:0)
这将允许任何字符的数字ascii字符。但是,如果您只有引号来删除它,那么运行替换就不会太多。
var str = "[["2016-11-17",771.22998],["2016-11-16",764.47998],["2016-11-15",758.48999],["2016-11-14",736.080017],["2016-11-11",754.02002],["2016-11-10",762.559998],["2016-11-09",785.309998],["2016-11-08",790.51001],["2016-11-07",782.52002],["2016-11-04",762.02002],["2016-11-03",762.130005],["2016-11-02",768.700012],["2016-11-01",783.609985],["2016-10-31",784.539978]]";
// regex to get the ascii number
var r = /\&#(\d\d);/gi;
// replaces each numerical ascii character with their character representation
str = str.replace(r, function (match, grp) {
return String.fromCharCode(parseInt(grp)); } );
console.log(JSON.parse(str));

答案 2 :(得分:0)
尝试解码编码的字符串,重用HTML解析器,使其更便携,更快速,可重复使用。正则表达式模式特定于当前问题,每次遇到不同的字符时,您都会编写并重写新模式。我使用类似于此的封装函数方法:
function htmlParse( x ) {
var c = document.createElement("div");
c.innerHTML = x;
return c.innerText;
};
现在让我们解码您检索到的字符串......
var str = "[["2016-11-17",771.22998],["2016-11-16",764.47998],["2016-11-15",758.48999],["2016-11-14",736.080017],["2016-11-11",754.02002],["2016-11-10",762.559998],["2016-11-09",785.309998],["2016-11-08",790.51001],["2016-11-07",782.52002],["2016-11-04",762.02002],["2016-11-03",762.130005],["2016-11-02",768.700012],["2016-11-01",783.609985],["2016-10-31",784.539978]]";
|>>
var decoded = htmlParse( str );
console.log( decoded );
并查看使用json解析是否成功
var arr = JSON.parse( decoded );
console.log( arr );
这是片段......
var str = "[["2016-11-17",771.22998],["2016-11-16",764.47998],["2016-11-15",758.48999],["2016-11-14",736.080017],["2016-11-11",754.02002],["2016-11-10",762.559998],["2016-11-09",785.309998],["2016-11-08",790.51001],["2016-11-07",782.52002],["2016-11-04",762.02002],["2016-11-03",762.130005],["2016-11-02",768.700012],["2016-11-01",783.609985],["2016-10-31",784.539978]]";
var decoded = htmlParse(str);
console.log(decoded);
var arr = JSON.parse(decoded);
console.log(arr);
function htmlParse(x) {
var c = document.createElement("div");
c.innerHTML = x;
return c.innerText;
};

答案 3 :(得分:0)
如果使用json
包写入数据,请将ensure_ascii
参数设置为false。
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
对于Python2.x,在打开文件时使用codecs
库设置输出文件的编码。