Bu basit normal ifade çözümü, çoğu durumda JSON özellik adlarını alıntı yapmak için çalışır:
const object = { name: 'John Smith' };
const json = JSON.stringify(object);
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);
Aşırı zor vaka:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
Bunu düzelttiği için Rob W'ye özel teşekkürler.
Sınırlamalar
Normal durumlarda yukarıda belirtilen regexp çalışacaktır, ancak matematiksel olarak JSON formatını her durumda çalışacak şekilde bir düzenli ifade ile tanımlamak imkansızdır (regexp ile aynı sayıda küme parantezini saymak imkansızdır). JSON dizesini yerel işlev aracılığıyla resmi olarak ayrıştırarak ve yeniden seri hale getirerek teklifleri kaldırmak için yeni bir işlev oluşturun:
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}}`;
}
Örnek: https://jsfiddle.net/DerekL/mssybp3k/