【问题标题】:Loop through JSON object returned from cookie遍历从 cookie 返回的 JSON 对象
【发布时间】:2014-07-15 00:11:10
【问题描述】:

我知道有很多关于这方面的问题,但我尝试了几种不同的建议解决方案,并且每种解决方案都得到了相同的结果。

我将复选框值以timeArr = [ event-name-one: 0: 1404915600, 1: 1404917400 ] 的格式存储在一个数组中。当数组使用新的键/值对更新时,会更新一个 cookie,该 cookie 将数组存储为 JSON 对象。

我使用jQuery.cookie('day', JSON.stringify(timeArr), {expires: 7}); 将JSON 对象存储在cookie 中,它以以下格式存储数组(从console.log(); 返回):

{"event-name-one":{"0":1405346400,"1":1405347600},"event-name-two":{"0":1405357200,"1":1405358400}}

在这种情况下,event-name-oneevent-name-two 是复选框的 ID。我需要遍历返回的 cookie 值(JSON 对象)并检查在返回的 cookie 中找到谁的 ID 的复选框。

我尝试了几个不同的循环,即for(var k in cookieValue){}jQuery.each(jQuery.parseJSON(cookieValue), function(i, v) {});,但都没有成功。

for(var k in cookieValue) 循环分别返回对象的每个字母,jQuery.each() 循环返回此错误:Cannot use 'in' operator to search for '76' in ...

如何将此 JSON 字符串转换回数组,以便循环遍历它并获取“键”

【问题讨论】:

  • 你能提供一个jsfiddle吗?我无法重现该问题。我尝试了var json = '{"event-name-one":{"0":1405346400,"1":1405347600},"event-name-two":{"0":1405357200,"1":1405358400}}'; jQuery.each(jQuery.parseJSON(json), function(i, v) { console.log(i, v); });,它记录了以下内容:event-name-one Object {0: 1405346400, 1: 1405347600}event-name-two Object {0: 1405357200, 1: 1405358400}
  • 不幸的是,我无法在 Fiddle 中重现该问题。当我将相同的代码放在小提琴中时,它似乎可以正确返回,但是当我的服务器上有完全相同的东西时,它会返回 Uncaught TypeError: Cannot use 'in' operator to search for '109' in {"event-name-one":{"0":"1405346400","1":"1405347600"}} 当我复制并粘贴您的确切 JSON 字符串和上面的 $.each() 函数时,我得到一个Unexpected Token 错误
  • 我不会为此使用 cookie - 我会使用 localStorage。
  • 这表明你传入jQuery.each的不是对象而是字符串。
  • @Andy 我不能使用本地存储,因为它必须与 IE8 兼容。我找到了答案并发布了。

标签: javascript jquery arrays json cookies


【解决方案1】:

jQuery.cookie() 必须自动将数组字符串化为 JSON 对象,因为为了从循环中获得正确的结果,我必须在响应中使用 jQuery.parseJSON() 两次。

例子:

var cookieVal = jQuery.cookie('day_planner');
jQuery.each(jQuery.parseJSON(jQuery.parseJSON(cookieVal)), function(i, v) { 
    console.log(i, v); 
});

这个循环返回event-name-one Object {0: "1405346400", 1: "1405347600"}

【讨论】:

  • 你必须解析两次的原因是不是你有多维数据。这是因为该值被 stringified 两次。可能是 $.cookie 已经为您将值转换为 JSON,所以不要调用 JSON.stringify(timeArr)
  • 这更有意义。更新了答案。
  • 我建议你在使用$.cookie时不要stigify,而不是两次解析JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多