如何将表示对象数组的字符串解析为JSON对象数组
问题原因
JSON.parse(JSON.stringify(t))属于无效操作:t本身是字符串类型,JSON.stringify会将普通字符串转为带转义的JSON字符串,再次parse只会得到和原t完全一致的字符串,此时tString仍是普通字符串,按下标取值自然返回第一个字符[- 你提供的原始字符串
t本身格式非法:嵌套在数组内的JSON对象字符串,内部的双引号没有做转义处理,直接解析会抛出语法错误
正确实现方式
如果你可以修改源字符串的定义,先补全内部引号的转义,再做两次解析即可:
// 补全对象内部双引号的转义 let t = `["{\\"name\\": \\"a\\", \\"description\\": \\"b\\", \\"imageType\\": \\"c\\"}", "{\\"name\\": \\"aa\\", \\"description\\": \\"bb\\", \\"imageType\\": \\"cc\\"}"]`; // 第一次解析得到字符串数组 const strArray = JSON.parse(t); console.log(strArray[0]) // 输出 {"name": "a", "description": "b", "imageType": "c"} // 第二次遍历解析得到对象数组 const tArray = strArray.map(item => JSON.parse(item))
如果原始字符串是后端返回无法手动修改,可以先通过字符串替换修复格式后再解析:
let t = `["{\"name\": \"a\", \"description\": \"b\", \"imageType\": \"c\"}", "{\"name\": \"aa\", \"description\": \"bb\", \"imageType\": \"cc\"}"]`; // 替换修复非法引号格式 const fixedT = t.replace(/"{/g, '{"').replace(/}"/g, '"}').replace(/\\"/g, '"'); const tArray = JSON.parse(fixedT); console.log(tArray[0])
内容的提问来源于stack exchange,提问作者ashes999
相关产品推荐
相关产品推荐

