यह सरल नियमित अभिव्यक्ति समाधान ज्यादातर मामलों में JSON संपत्ति के नामों को रद्द करने के लिए काम करता है:
const object = { name: 'John Smith' };
const json = JSON.stringify(object); // {"name":"John Smith"}
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted); // {name:"John Smith"}
चरम परिस्थिति में:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF"); // U+ FFFF
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
// '{ name: "J\":ohn Smith" }'
इसे ठीक करने के लिए रोब डब्ल्यू का विशेष धन्यवाद।
सीमाएं
सामान्य मामलों में पूर्वोक्त regexp काम करेगा, लेकिन गणितीय रूप से JSON प्रारूप को एक नियमित अभिव्यक्ति के साथ वर्णन करना असंभव है, जैसे कि यह हर एक मामले में काम करेगा (समान संख्या में घुंघराले ब्रैकेट की गिनती करना rexxp के साथ असंभव है।) इसलिए, मेरे पास है। मूल फ़ंक्शन के माध्यम से JSON स्ट्रिंग को औपचारिक रूप से पार्स करके उद्धरण को निकालने के लिए एक नया फ़ंक्शन बनाएं और इसे पुन: व्यवस्थित करें:
function stringify(obj_from_json) {
if (typeof obj_from_json !== "object" || Array.isArray(obj_from_json)){
// not an object, stringify using native function
return JSON.stringify(obj_from_json);
}
// Implements recursive object serialization according to JSON spec
// but without quotes around the keys.
let props = Object
.keys(obj_from_json)
.map(key => `${key}:${stringify(obj_from_json[key])}`)
.join(",");
return `{${props}}`;
}
उदाहरण: https://jsfiddle.net/DerekL/mssybp3k/