JSON.parse()没有给出预期的结果

时间:2012-11-28 05:06:47

标签: javascript json

我有一个由/ r分隔的JSON值字符串。它有点像数据库表中的记录。它看起来像:

“{” ID “:” ID”, “孔”: “洞”, “统计”: “统计”, “值”: “值”} / R { “ID”:1354075540949, “洞”: “1”, “统计”: “得分”, “值”: “4”} / R { “ID”:1354075540949, “洞”: “1”, “统计”: “推杆”, “值”:” 1 “} / R {” ID “:1354075540949,” 洞 “:” 1" , “统计”: “冷杉”, “值”: “Y”} / R { “ID”:1354075540949, “洞”:” 1" , “统计”: “GIR”, “值”: “N”} / R“

第一行是列名(id,hole,stat,value),我只给它们相同的值。由/ r分隔的所有其他行是实际数据。

我用/ r分割这个字符串,然后遍历结果并将每个元素的JSON.parse()结果推送到一个数组,所以现在我有一个具有给定结构属性的对象数组(id,hole ,stat,value)。 一切正常,除了'id'字段最终为真或假而不是大长号。为什么这样做?

var tblData = localStorage.getItem(tblName).split("/r");
var data = new Array();

// fill the array
for (i = 1; i < tblData.length - 1; i++)
    data.push(JSON.parse(tblData[i]));

[编辑] 似乎这确实有效,但是有一个jQuery.grep()我在此之后运行,它将id属性设置为true / false。

var changeRecords = jQuery.grep(data, func);

func是:

function (v) { return v.id == gCurrentRoundID && v.hole == gCurrentHole; }

不知道为什么会将id设置为true / false。

[EDIT2]

没关系,我发现了我的错误。上面的函数不是正确的函数,而我所做的函数只有v.id = gCurrentRoundID的1个等号,这就是为什么它将它设置为true / false。

1 个答案:

答案 0 :(得分:3)

我只需手动将整个字符串更改为有效的JSON。以[开头,以]结尾,然后用逗号替换所有/r。最终结果应该是

  

“[{” ID “:” ID”, “孔”: “洞”, “统计”: “统计”, “值”: “值”},{ “ID”:1354075540949, “洞”: “1”, “统计”: “得分”, “值”: “4”},{ “ID”:1354075540949, “洞”: “1”, “统计”: “推杆”, “值”:“1 “},{” ID “:1354075540949,” 洞 “:” 1" , “统计”: “冷杉”, “值”: “Y”},{ “ID”:1354075540949, “洞”: “1”, “统计”: “GIR”, “值”: “N”},]“

然后通过JSON.parse

解析

请注意,最后一个尾随逗号可能会导致IE8出现问题。如果是这样,您应该能够相当容易地手动修复它。像s = s.substr(0, s.length - 2) + ']';

这样的东西