如何解析包含字符串化JSON值的JavaScript对象?
解决对象中嵌套字符串化JSON的解析问题
你需要遍历对象的所有属性,对每个属性值尝试JSON解析——能成功解析的(即原本是字符串化JSON的)就替换为解析后的对象,解析失败的(普通字符串或其他基本类型)保持原样。
具体实现代码
function parseNestedJson(obj) { // 处理非对象/数组的基本类型 if (typeof obj !== 'object' || obj === null) { try { return JSON.parse(obj); } catch (e) { // 解析失败,返回原内容 return obj; } } // 处理数组 if (Array.isArray(obj)) { return obj.map(item => parseNestedJson(item)); } // 处理对象 const parsedObj = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { parsedObj[key] = parseNestedJson(obj[key]); } } return parsedObj; }
使用示例
先修正你原对象的语法错误(c属性末尾缺少逗号),再调用函数:
let obj = { a: "apple", b: 2, c: '{"p":"11","q":"22","r":{"x":"aa","y":"bb"}}', d: "3" }; const result = parseNestedJson(obj); console.log(result.c); // 输出:{ p: '11', q: '22', r: { x: 'aa', y: 'bb' } } console.log(result.a); // 输出:"apple"(普通字符串保留原样)
逻辑说明
这个函数会递归遍历对象的所有层级:
- 对每个值尝试
JSON.parse,如果是合法的字符串化JSON,就替换为解析后的对象/数组; - 如果解析失败(比如普通字符串、数字等),就直接返回原内容,不会破坏原有数据。
内容的提问来源于stack exchange,提问作者Siva rama krishna Bethu
相关产品推荐
相关产品推荐

