JSON.parse javascript字符串

时间:2016-11-19 02:09:52

标签: javascript json

在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中,因为最有可能是一个比我尝试的更好的从头到尾的解决方案。

4 个答案:

答案 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库设置输出文件的编码。