gpt4 book ai didi

javascript - 使用 stringify 进行嵌套 JSON 以在 localStorage 中使用

转载 作者:行者123 更新时间:2023-11-28 07:44:54 24 4
gpt4 key购买 nike

我有一个由 给出的嵌套 JSON 对象

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 对象的嵌套部分。例如,它会忽略它并显示

"animal":{}

我怎样才能简单地解决这个问题?我见过涉及修改 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;
}

使用来自 https://stackoverflow.com/a/218833/4309934 的 isArray() 函数

function isArray ( obj ) {
return isObject(obj) && (obj instanceof Array);
}

末尾有一个额外的逗号是有问题的,所以要删除它,我再次使用子字符串。例如,对于原始问题中定义的数据,可以使用它

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

请随意寻找对此方法的改进。

关于javascript - 使用 stringify 进行嵌套 JSON 以在 localStorage 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com