Solusi ekspresi reguler sederhana ini berfungsi untuk menghapus kutipan nama properti JSON dalam banyak kasus:
const object = { name: 'John Smith' };
const json = JSON.stringify(object);
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);
Kasus ekstrim:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
Terima kasih khusus kepada Rob W untuk memperbaikinya.
Batasan
Dalam kasus normal, regexp yang disebutkan di atas akan berfungsi, tetapi secara matematis tidak mungkin untuk menggambarkan format JSON dengan ekspresi reguler sedemikian rupa sehingga akan berfungsi di setiap kasus (menghitung jumlah tanda kurung keriting yang sama tidak mungkin dengan regexp.) Oleh karena itu, saya punya buat fungsi baru untuk menghapus tanda kutip dengan mengurai string JSON secara resmi melalui fungsi asli dan melakukan reserialisasi:
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}}`;
}
Contoh: https://jsfiddle.net/DerekL/mssybp3k/