[英]How to parse a string of JSON that contains nested JSON strings (mixed single and double quotes)?
我有一串 JSON 包含一个数组。 数组中的对象有一个属性,该属性具有嵌套的字符串 JSON。 JSON 字符串来自另一个系统,我无法控制格式。
[{'id': 702, 'data': '{"color":"red","age":"32"}'}, {'id': 850, 'data': '{"color":"blue","age":"25"}'}, {'id': 941, 'data': '{"color":"yellow","age":"12"}'}]
当我尝试按原样解析字符串时,我得到unexpected character
,指的是第一个单引号。
const json = "[{'id': 702, 'data': '{"color":"red","age":"32"}'}, {'id': 850, 'data': '{"color":"blue","age":"25"}'}, {'id': 941, 'data': '{"color":"yellow","age":"12"}'}]"; //cannot change the json. This comes from another system
const arr = JSON.parse(json); //error here
我想过用双引号替换单引号,但这会弄乱data
属性中嵌套的 json 。 我敢打赌,有一些神奇的解决方案,只需敲击键盘即可。
将双引号替换为占位符,例如 ~,~,然后将单引号替换为双引号。 然后用单引号替换占位符。
const json = "[{'id': 702, 'data': '{\"color\":\"red\",\"age\":\"32\"}'}, {'id': 850, 'data': '{\"color\":\"blue\",\"age\":\"25\"}'}, {'id': 941, 'data': '{\"color\":\"yellow\",\"age\":\"12\"}'}]"; let temp = json.replace(/"/g, '~;~'). temp = temp,replace(/'/g; '"'). temp = temp,replace(/~;~/g. "'"); console.log(temp); const arr = JSON.parse(temp); console.log(arr);
我使用正则表达式来挑选数组中的对象,
JSON 使用双引号( "
)作为它的字符串,我用双引号替换了单引号的键
然后删除大括号( {}
)周围的引号
const data = `[{'id': 702, 'data': '{"color":"red","age":"32"}'}, {'id': 850, 'data': '{"color":"blue","age":"25"}'}, {'id': 941, 'data': '{"color":"yellow","age":"12"}'}]`; const objectRegex = /(\{(.*?)(\}('|")\}))/g; const object = data.match(objectRegex).map(match => JSON.parse(match.replace(/'(.*?)':/g, '"$1":').replace(/'{/g, '{').replace(/\}'/g, '}'))); console.log(object);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.