1

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

"{"id":"id","hole":"hole","stat":"stat","value":"value"}/r{"id":1354075540949,"hole":"1" ,"stat":"score","value":"4"}/r{"id":1354075540949,"hole":"1","stat":"putts","value":"1"} /r{"id":1354075540949,"hole":"1","stat":"fir","value":"y"}/r{"id":1354075540949,"hole":"1", "stat":"gir","value":"n"}/r"

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

我用 /r 拆分这个字符串,然后循环遍历结果并将每个元素的 JSON.parse() 的结果推送到一个数组,所以现在我有一个具有给定结构属性的对象数组(id、hole、stat、价值)。一切正常,除了“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。

[编辑2]

没关系,我发现了我的错误。上面的函数不是正确的,而我确实只有 1 个等号表示 v.id = gCurrentRoundID,这就是为什么将它设置为真/假的原因。

4

1 回答 1

3

我只需手动将整个字符串更改为有效的 JSON。让它以 a 开头并以 a[结尾,然后用逗号]替换所有这些s。/r最终结果应该看起来像

"[{"id":"id","hole":"hole","stat":"stat","value":"value"},{"id":1354075540949,"hole":"1" ,"stat":"score","value":"4"},{"id":1354075540949,"hole":"1","stat":"putts","value":"1"}, {"id":1354075540949,"hole":"1","stat":"fir","value":"y"},{"id":1354075540949,"hole":"1","stat" :"gir","值":"n"},]"

然后通过解析JSON.parse

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

于 2012-11-28T05:12:20.883 回答