ต้องการความช่วยเหลือในการจัดรูปแบบ JSON (ใน JavaScript) โดยใช้ Stringify และ Regex แทน
ฉันขาดบางอย่างใน regex และกำลังลบตัวอักษรสุดท้ายของแต่ละรายการก่อนเครื่องหมายจุลภาค
โค้ดตัวอย่าง:
let test_json = {
"a" : { "a1" : "one", "is_active" : true, "a2" : "two" },
"b" : { "b1" : "one", "is_active" : true, "b2" : "two" }
};
JSON.stringify(test_json, null, 3).replace(/[^}],\n( )*"/g, ', "');
ผลลัพธ์คือ:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
สิ่งที่ฉันพยายามได้รับคือ:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
สิ่งที่ผิด:
"one, should be" one ",
" tru, should be "true",
คำตอบ
3 BenWainwright
ปัญหาของคุณคือคุณกำลังค้นหาลำดับอักขระต่อไปนี้
- อักขระใด ๆ ที่ไม่ใช่วงเล็บปีกกาปิด
- ลูกน้ำ
- อักขระขึ้นบรรทัดใหม่
- ช่องว่างจำนวนเท่าใดก็ได้
และการเปลี่ยนลำดับทั้งหมด เนื่องจาก "e" ต่อท้าย "true" ไม่ใช่วงเล็บปีกกาปิดจึงถูกแทนที่ด้วยเช่นกัน
สิ่งที่คุณต้องการคือให้รายการแรกในลำดับเป็น "เครื่องหมายจุลภาคที่มาทันทีหลังวงเล็บปีกกาปิด" คุณสามารถทำได้โดยใช้lookbehind เชิงลบ
let test_json = {
a: {
a1: "one",
is_active: true,
a2: "two"
},
b: {
b1: "one",
is_active: true,
b2: "two"
},
};
const result = JSON.stringify(test_json, null, 3).replace(
/(?<!}),\n\s*/g,
", "
);
console.log(result);
1 MCP
JSON.stringify(test_json,null,3).replace(/([^}]?),\n( )*"/g, '$1, "');
ไม่แน่ใจว่าเป็นวิธีที่ดีที่สุด แต่เป็นสิ่งแรกที่ควรคำนึงถึง