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