繁体   English   中英

如何解析包含嵌套 JSON 字符串(混合单引号和双引号)的 JSON 字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM