ต้องการความช่วยเหลือในการจัดรูปแบบ JSON (ใน JavaScript) โดยใช้ Stringify และ Regex แทน

Jan 19 2021

ฉันขาดบางอย่างใน 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 Jan 19 2021 at 06:36

ปัญหาของคุณคือคุณกำลังค้นหาลำดับอักขระต่อไปนี้

  • อักขระใด ๆ ที่ไม่ใช่วงเล็บปีกกาปิด
  • ลูกน้ำ
  • อักขระขึ้นบรรทัดใหม่
  • ช่องว่างจำนวนเท่าใดก็ได้

และการเปลี่ยนลำดับทั้งหมด เนื่องจาก "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 Jan 19 2021 at 06:31
JSON.stringify(test_json,null,3).replace(/([^}]?),\n( )*"/g, '$1,   "');

ไม่แน่ใจว่าเป็นวิธีที่ดีที่สุด แต่เป็นสิ่งแรกที่ควรคำนึงถึง