2014-04-10 116 views
0

对不起,如果这已在其他地方得到解答,我还没有找到它,如果它已经。我有有效的JSON:查找和存储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" 
       } 
      ] 
     } 
    ] 
} 

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

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

将创建的 “主” 单localStorage的实例。但是,这(和其他变化):

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

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

+0

世界上哪个地方的“Hole1Info”来自哪里?我的意思是,这在JSON中没有出现。 – Pointy

+1

也如果你知道有一个关键的“主”,为什么不做'for(var key in data.main)'? – Pointy

+0

[访问/进程(嵌套)对象,数组或JSON]的可能重复(http://stackoverflow.com/questions/11922383/access-process-nested-objects-arys-or-json) –

回答

2

正如@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"}]" 
+0

绝对是我在寻找的东西 - 当我处理对象时,我对这些语法的了解是非常有限的,所以真正感谢我能得到的任何帮助。谢谢,罗伯! – jimiayler

+0

很高兴帮助! :) –