โซลูชันนิพจน์ทั่วไปที่เรียบง่ายนี้ใช้ได้กับการยกเลิกการอ้างชื่อคุณสมบัติ JSON ในกรณีส่วนใหญ่:
const object = { name: 'John Smith' };
const json = JSON.stringify(object);
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);
กรณีที่รุนแรง:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
ขอขอบคุณเป็นพิเศษสำหรับ Rob W สำหรับการแก้ไข
ข้อ จำกัด
ในกรณีปกติ regexp ดังกล่าวข้างต้นจะใช้งานได้ แต่ในทางคณิตศาสตร์เป็นไปไม่ได้ที่จะอธิบายรูปแบบ JSON ด้วยนิพจน์ทั่วไปซึ่งจะใช้งานได้ในทุกกรณี (การนับวงเล็บปีกกาจำนวนเท่ากันเป็นไปไม่ได้ด้วย regexp) ดังนั้นฉันมี สร้างฟังก์ชั่นใหม่เพื่อลบเครื่องหมายคำพูดโดยการแยกวิเคราะห์สตริง JSON อย่างเป็นทางการผ่านฟังก์ชันเนทีฟและกำหนดค่าใหม่อีกครั้ง:
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}}`;
}
ตัวอย่าง: https://jsfiddle.net/DerekL/mssybp3k/