如何更新本地存储中的 json 值

Posted

技术标签:

【中文标题】如何更新本地存储中的 json 值【英文标题】:How to update json value in localstorage 【发布时间】:2014-03-22 06:06:28 【问题描述】:

所以我有一个数组 stringify'ed 并保存在我的 localStorage 中的“persons”键下。

arr = ["name":"a", "age": 1, "sport":"football",
"name":"b", "age": 2, "sport":"volley",
"name":"c", "age": 3, "sport":"basket"];
localStorage.setItem('persons', JSON.stringify(arr));

当我需要更新姓名为 x 的人的年龄时(假设输入是姓名为 b 的人),我的方法是获取并解析我的 localStorage 密钥:

var persons = JSON.parse(localStorage.persons);

然后我创建一个 for 循环来遍历对象并找到名称为 b 的对象:

for (var i = 0; i < persons.length; i++) 
   if(inputName === persons[i].name)
       persons[i].age += 2
       localStorage.setItem("persons", JSON.stringify(aCustomers[i].age));
   

这似乎不起作用。 我在循环中找到了我的匹配项,但我不知道如何将 2 年添加到年龄并在我的 localStorage.persons 中更新该值而不覆盖和破坏 json 对象。

【问题讨论】:

你正在字符串化aCustomers。这就是你想要的吗? 这是一个错误!应该是人! 这能解决问题吗,还是有其他问题? epascarello 已修复,谢谢! :-) 【参考方案1】:

您需要像原来一样重新设置对象,现在您只存储一个数字,而不是对象。

var persons = JSON.parse(localStorage.persons);
for (var i = 0; i < persons.length; i++) 
   if(inputName === persons[i].name)  //look for match with name
       persons[i].age += 2;  //add two
       break;  //exit loop since you found the person
   

localStorage.setItem("persons", JSON.stringify(persons));  //put the object back

【讨论】:

epascarello 唯一的问题是它在年龄数字后添加了 2 而不是将它们加在一起。我将 2 作为变量传递 - 你有什么想法吗? persons[i].age = parseInt(persons[i].age,10) + 2; 似乎不起作用。对了,我可以在控制台中看到 person[i].age 是一个字符串,但在 json 中它是一个数字?? 我正在添加另一个变量(在这种情况下为 2),我在其中做了 parseInt 然后它起作用了。

以上是关于如何更新本地存储中的 json 值的主要内容,如果未能解决你的问题,请参考以下文章

如何将 json 文件加载到本地存储中?

如何将本地存储中的 JSON 对象添加到 Android Studio 上的片段列表

在 Javascript 中更新本地存储数组

将数组保存并更新到本地存储JS

调用更新本地存储返回未定义

如何将 JSON 数据存储和检索到本地存储中?