Javascript 名称未知时查找和存储JSON嵌套数组
很抱歉,如果这里的其他地方已经回答了这个问题,如果已经回答了,我还没有找到。我有有效的JSON:Javascript 名称未知时查找和存储JSON嵌套数组,javascript,arrays,json,local-storage,Javascript,Arrays,Json,Local Storage,很抱歉,如果这里的其他地方已经回答了这个问题,如果已经回答了,我还没有找到。我有有效的JSON: { "main": [ { "Example1": [ { "Example1_Var02": "5", "Example1_Var09": "443", "Example1_Var27": "23",
{
"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()
并返回“数据”,例如成功:函数(数据){
,我想将每个嵌套数组分解到localstorage中,而不需要知道它们的键名,因为我可能永远也不知道它们。但事实上,我无法在我知道这些子数组名的情况下获得一些有用的内容。这:
for(var key in data){
localStorage.setItem(key, JSON.stringify(data[key]));
}
将创建一个“main”的localstorage实例。但这(以及其他变体):
返回错误“Uncaught TypeError:无法读取未定义的属性“0”。由于我无法使用已知的子数组键名完成此操作,因此在抽象、匿名级别执行此操作更具挑战性。如何简单地输出“main”中包含的任何嵌套数组要在不一定知道JSON中的名称的情况下分离本地存储?谢谢您的帮助。正如@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"}]"
“Hole1Info”是从哪里来的?我的意思是,它在JSON中没有出现过。另外,如果你知道有一个键“main”,为什么不直接执行
for(var key in data.main)
?@Pointy,很抱歉,您可能是对的,我已经编辑了答案以删除该实例。对于您和Felix Kling,我可能知道有一个名为“main”的超级数组,但不知道它包含的数组。我正试图以完全匿名的方式找出“main”中包含的数组并将这些数组输出到localstorage,这是一个不同的实现,与Felix关于嵌套数据结构的无可否认的经典答案不同。这绝对是我想要的——我在处理对象时对这些语法的知识非常有限,因此非常感谢我能得到的任何帮助。谢谢,Rob!
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"}]"