如何更新本地存储中的 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 值的主要内容,如果未能解决你的问题,请参考以下文章