Javascript 使用stringify将嵌套JSON用于本地存储
我有一个嵌套的JSON对象,由Javascript 使用stringify将嵌套JSON用于本地存储,javascript,json,Javascript,Json,我有一个嵌套的JSON对象,由 var data = { "animal": { "canine": "dog", "feline": "cat" }, "bug": "beetle", "carrot": { "color": "orange", "type": "vegetable" }, "population": 100 }; 我一直在尝试使用JSO
var data = {
"animal":
{
"canine": "dog",
"feline": "cat"
},
"bug": "beetle",
"carrot":
{
"color": "orange",
"type": "vegetable"
},
"population": 100
};
我一直在尝试使用JSON.stringify通过
localStorage.setItem("myData", JSON.stringify(data));
但它不存储JSON对象的嵌套部分。例如,它会忽略它,而显示
动物:{}
我怎样才能简单地解决这个问题?我见过一些解决方案,包括修改ajax以使其成为同步的,但我并不真正理解发生了什么
我只是想要它,这样我就可以在控制台中获得它
console.log(JSON.stringify(data))
//{"animal":{"canine":"dog","feline":"cat"},"bug":"beetle","carrot":{"color":"orange","type":"vegetable"},"population":100}
因此,如果有一种方法不使用stringify,那也将非常好。我创建了一个适合我的解决方案 我编写了一个递归函数,通过对象使用预排序算法。它还不完整,可以进行明显的改进,使其更通用,尤其是对于对象数组之类的东西,但我发现它在基本级别上运行得相当好
function recursiveObjStr(obj, str)
{
str += "{";
for(var inst in obj)
{
str += "\"" + inst + "\"" + ":";
if(isArray(obj[inst]))
{
str += "[";
for(var inst2 in obj[inst])
{
str += "\"" + obj[inst][inst2] + "\"" + ",";
}
str = str.substring(0,str.length-1);
str += "]";
}
else if(typeof(obj[inst]) == "object")
{
str = recursiveObjStr(obj[inst], str);
}
else if(typeof(obj[inst]) == "function")
{
str += obj[inst];
}
else
{
if(!(isNaN(obj[inst])))
{
str += obj[inst];
}
else if(typeof(obj[inst]) == "boolean")
{
str += obj[inst];
}
else
{
str += "\"" + obj[inst] + "\"";
}
}
if(str[str.length-1] !== ",")
{
str += ",";
}
}
str = str.substring(0, str.length - 1);
str += "},";
return str;
}
使用此isArray函数可从
在结尾添加一个逗号会有问题,所以要删除它,我再次使用substring。例如,对于原始问题中定义的数据,可以由
var str = "";
str = recursiveObjStr(data, str);
//console.log(str) gives {"animal":{"canine":"dog","feline":"cat"},"bug":"beetle","carrot":{"color":"orange","type":"vegetable"},"population":100},
str = str.substring(0, str.length-1);
//removes the comma
请随意查找此方法的改进。我无法重现问题:我在chrome控制台中运行了您的代码,它似乎工作正常。你是如何获得价值的?localStorage.getItemmyData返回正确的结果。是否在localStorage.setItem之前立即尝试了console.log?我过去使用过JSON.stringify精细本地存储。。。您还可以显示代码检索值,以及浏览器和版本的详细信息吗?我使用的是chrome,以前我对嵌套对象使用过JSON.stringify,它工作正常,但这次出现了问题。尤其是对于更复杂的对象。我创建对象的方式可能有问题,但我已成功解决了遇到的情况下的问题。可能是您使用带字符串键的数组而不是对象吗?这将是预期的结果。这几乎肯定是错误的方法。你应该改为修复你的数据。我的数据绝对是对象的对象。我能够将数据转换成类似于我希望在localStorage中使用的格式(即JSON)的字符串。这种方法冗长乏味,但它奏效了。我只是想发布我的答案,以防它对其他人有帮助。糟糕的答案。Stringify正是您所需要的。
var str = "";
str = recursiveObjStr(data, str);
//console.log(str) gives {"animal":{"canine":"dog","feline":"cat"},"bug":"beetle","carrot":{"color":"orange","type":"vegetable"},"population":100},
str = str.substring(0, str.length-1);
//removes the comma