To proste rozwiązanie wyrażenia regularnego działa w większości przypadków w celu usunięcia cudzysłowu nazw właściwości JSON:
const object = { name: 'John Smith' };
const json = JSON.stringify(object);
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);
Ekstremalna sprawa:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
Specjalne podziękowania dla Roba W. za naprawienie tego.
Ograniczenia
W normalnych przypadkach powyższe wyrażenie regularne będzie działać, ale matematycznie niemożliwe jest opisanie formatu JSON wyrażeniem regularnym w taki sposób, aby działał w każdym pojedynczym przypadku (policzenie tej samej liczby nawiasów klamrowych jest niemożliwe w przypadku wyrażenia regularnego). Dlatego mam utwórz nową funkcję, aby usunąć cudzysłowy, formalnie analizując ciąg JSON za pomocą funkcji natywnej i ponownie go zerializuj:
function stringify(obj_from_json) {
if (typeof obj_from_json !== "object" || Array.isArray(obj_from_json)){
return JSON.stringify(obj_from_json);
}
let props = Object
.keys(obj_from_json)
.map(key => `${key}:${stringify(obj_from_json[key])}`)
.join(",");
return `{${props}}`;
}
Przykład: https://jsfiddle.net/DerekL/mssybp3k/