【问题标题】:Finding and Storing JSON Nested Arrays When Names Unknown在名称未知时查找和存储 JSON 嵌套数组
【发布时间】:2014-05-24 10:12:01
【问题描述】:

对不起,如果这里的其他地方已经回答了这个问题,我还没有找到它。我有有效的 JSON:

{
    "main": [
        {
            "Example1": [
                {
                    "Example1_Var02": "5",
                    "Example1_Var09": "443",
                    "Example1_Var27": "23",
                    "Example1_Var01": "31"
                }
            ],
            "Example2": [
                {
                    "Example2_Var99": "2",
                    "Example2_Var84": "344",
                    "Example2_Var46": "56",
                    "Example2_Var03": "78"
                }
            ]
        }
    ]
}

我不知道他们的名字和/或会定期更改,除了“main”的超级键。假设成功的 $.ajax() 调用返回“数据”,例如success: function(data) { ,我想将每个嵌套数组分解为 localstorage 而无需知道它们的键名,因为我可能永远不知道它们。但事实上,我无法在我知道这些子数组名称的地方得到一些东西。这个:

for(var key in data){
   localStorage.setItem(key, JSON.stringify(data[key]));
}

将创建一个“main”的本地存储实例。但是这个(和其他变体):

for(var key in data){
   localStorage.setItem(key.Example1[0], JSON.stringify(data[key.Example1]));
}   

返回错误“未捕获的类型错误:无法读取未定义的属性 '0'”。而且由于我无法使用已知的子数组键名来完成此操作,因此在抽象的匿名级别上执行此操作仍然更具挑战性。我怎样才能简单地输出恰好包含在“main”中的任何嵌套数组以分隔本地存储,而不必知道它们在 JSON 中的名称?感谢您的帮助。

【问题讨论】:

  • “Hole1Info”到底是从哪里来的?我的意思是,这在 JSON 中没有出现。
  • 如果你知道有一个“main”键,为什么不直接做for (var key in data.main) ??
  • 对,@Pointy,我很抱歉——我已经编辑了答案以删除该实例。对于您和 Felix Kling,我可能知道有一个名为“main”的超级数组,但不知道它包含的数组。我试图以一种完全匿名的方式找出“main”中包含的那些数组是什么,并将这些数组的内容输出到 localstorage,这是一种与 Felix 无可否认的关于嵌套数据结构的令人敬畏的规范答案不同的实现。

标签: javascript arrays json local-storage


【解决方案1】:

正如@Pointy 指出的那样,如果您总是可以期望 main 存在并且对象的结构是可预测的(即使名称和数据不是),您可以使用 for...in 语句来迭代对象:

for(var outer in x.main){ 
    for(var inner_key in x.main[outer]){ 
        localStorage.setItem(inner_key, JSON.stringify(x.main[outer][inner_key]));

    }
}

console.log(localStorage.getItem('Example1'));
// "[{"Example1_Var02":"5","Example1_Var09":"443","Example1_Var27":"23","Example1_Var01":"31"}]"

【讨论】:

  • 绝对是我所寻找的——我在处理对象时对这些语法的了解非常有限,因此非常感谢我能得到的任何帮助。谢谢,罗伯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2019-03-16
相关资源
最近更新 更多