簡體   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