【发布时间】:2013-12-06 05:07:25
【问题描述】:
我有一个有效的 JSON 结果:
{
"metadata": [
{
"name": "md1",
"value": "blah1"
},
{
"name": "md2",
"value": "blah2"
},
{
"name": "tee2",
"value": "blah3"
}
],
"subdata1": [
{
"name": "sd1_1",
"value": "blah1_1"
},
{
"name": "sd1_2",
"value": "blah1_2"
},
{
"name": "sd1_3",
"value": "blah1_3"
},
{
"name": "sd1_4",
"value": "blah1_1"
}
],
"subdata2": [
{
"name": "sd2_1",
"value": "blah2_1"
},
{
"name": "sd2_2",
"value": "blah2_2"
},
{
"name": "sd2_3",
"value": "blah2_3"
}
]
}
通过成功的 jQuery .ajax() 调用进入:
$.ajax({
url: 'test.json',
type: 'get',
datatype: 'json',
processData: false,
success: function(data) { //do something...};
将整个结果组合成一个与整体键关联的值相对容易:
localStorage.setItem('newtest', data);
这会将我的整个 JSON 响应保存为一个带有名为“newtest”的键的值。但是假设我希望每个数组的描述符作为键名,关联数组作为值?在我的示例中,这将给我三个键/值对,每个数组保存为一个单独的字符串值,与分别名为“元数据”、“子数据1”和“子数据2”的键相关联。我进行了大量搜索,但没有找到正确的方法。非常感谢您对解决方案的任何帮助 - 感谢您的关注和帮助。
【问题讨论】:
-
我认为 localstorage 值必须是简单的字符串。您需要在存储数组之前对其进行序列化。
-
如果你想使用复杂的对象而不需要序列化你应该看看IndexedDb,但是AFAIK这个API还很年轻。
-
@Blazemonger,我不是这里的专家,但如果我简单地添加:“localStorage.setItem('newtest', data);”,我会将完整的 JSON 结果无误地保存到本地存储中。如果我尝试类似:“var newdata = $(data).serializeArray();”然后是“localStorage.setItem('newtest', newdata);”,我在 ls 中得到了无穷无尽的“/n”换行符。第一种情况更可取,因为这样我就可以在没有额外字符的情况下使用完整的字符串进行操作。 FWIW,我 am 将 HTML 中的表单数据序列化/setItem/stringify-ing 到 localstorage onclick,但我需要先通过 AJAX 在加载时设置 localstorage。
-
还有:'localStorage.setItem("newtest", data);'似乎以有效的 JSON 格式留下一个字符串,而实际上将它字符串化为 setItem 的一部分,例如'localStorage.setItem("newtest", JSON.stringify(data))' 添加正斜杠和其他无效的 JSON,即使我通过 $.ajax() 从实际 JSON 访问中删除了换行符。对于我所有的研究和尝试不同方法的尝试,这对我来说非常具有挑战性。
标签: javascript jquery json local-storage