Cần trợ giúp trong việc định dạng JSON (bằng JavaScript) với thay thế Stringify và Regex

Jan 19 2021

Tôi thiếu một cái gì đó với regex và nó đang xóa chữ cái cuối cùng của mỗi mục trước dấu phẩy.

Mã mẫu:

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, ',   "');

Kết quả là:

"{
   "a": {
      "a1": "one,   "is_active": tru,   "a2": "two"
   },
   "b": {
      "b1": "one,   "is_active": tru,   "b2": "two"
   }
}"

Những gì tôi đang cố gắng đạt được là:

"{
   "a": {
      "a1": "one",   "is_active": true,   "a2": "two"
   },
   "b": {
      "b1": "one",   "is_active": true,   "b2": "two"
   }
}"

Những điều sai:
"one, nên là" one ",
" tru, nên là "true",

Trả lời

3 BenWainwright Jan 19 2021 at 06:36

Vấn đề của bạn là bạn đang tìm thấy chuỗi ký tự sau

  • Bất kỳ ký tự nào không phải là dấu ngoặc nhọn đóng
  • Dấu phẩy
  • Một ký tự dòng mới
  • Bất kỳ số lượng khoảng trắng nào

Và thay thế toàn bộ trình tự . Vì "e" ở cuối "true" không phải là dấu ngoặc nhọn đóng, nó cũng được thay thế.

Những gì bạn cần là mục đầu tiên trong chuỗi phải là "dấu phẩy đứng ngay sau dấu ngoặc nhọn". Bạn có thể làm điều này bằng cách sử dụng một cái nhìn tiêu cực .

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,   "');

không chắc đó là cách tốt nhất nhưng đó là điều đầu tiên tôi nghĩ đến