我想解析包含某个值的JSON对象作为json字符串,请注意我之前不知道那些字段,所以我不能做类似的事情
obj[key]=JSON.parse(obj[key])
。我正在寻找一种简单的方法来做到这一点,
obj={
Name:"{\"FirstName\":\"Douglas\",\"LastName\":\"Crockford\"}"
}
我想要
{
Name:{
FirstName:"Douglas",
LastName:"Crockford"
}
}
答案 0 :(得分:0)
您可以使用Object.keys(obj)
获取属性名称以允许您使用JSON.parse()
答案 1 :(得分:0)
您可以随时尝试/传递每个密钥:
a = {
a: 1,
b: JSON.stringify({a: 1, b: 2}),
c: 'asdf'
}
console.log(a);
new_a = {}
Object.keys(a).map((key) => {
try {
new_a[key] = JSON.parse(a[key]);
} catch(err) {
new_a[key] = a[key];
}
})
console.log(new_a);

答案 2 :(得分:0)
我们将编写一个方便的小实用程序,它将函数映射到对象属性:
function mapObject(obj, fn) {
const result = {};
for (const prop in obj) result[prop] = fn(obj[prop], prop);
return result;
}
现在,您只需说出
即可创建一个包含所有输入JSON值的对象mapObject(obj, JSON.parse)
如果要防范无效JSON的属性值,那么
function parseJSON(x) {
try { return JSON.parse(x); }
catch (e) { return x; }
}
然后
mapObject(obj, parseJSON)
答案 3 :(得分:0)
如果您想对此产生矛盾,可以使用"reviver parameter"处理此方案的任意嵌套版本。从stringifying
您的对象开始!
function parseJSON(k,v) {
try { return JSON.parse(v, parseJSON); }
catch(e) { return v; }
}
JSON.parse(JSON.stringify(obj), parseJSON);
那真漂亮,还是仅仅是我?