Stringify 및 Regex 교체로 JSON 형식 (JavaScript)에 도움이 필요합니다.

Jan 19 2021

정규식에 무언가가 누락되었으며 쉼표 앞의 각 항목의 마지막 문자를 제거하고 있습니다.

샘플 코드 :

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,"one ",
"tru, "true",

답변

3 BenWainwright Jan 19 2021 at 06:36

문제는 다음과 같은 문자 시퀀스를 찾는 것입니다.

  • 닫는 중괄호가 아닌 모든 문자
  • 쉼표
  • 개행 문자
  • 임의의 공간

그리고 전체 시퀀스를 대체 합니다 . "true"끝에있는 "e"는 닫는 중괄호가 아니기 때문에 마찬가지로 대체됩니다.

필요한 것은 시퀀스의 첫 번째 항목이 "닫는 중괄호 바로 뒤에 오는 쉼표"입니다. 부정적인 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,   "');

그것이 최선의 방법인지는 확실하지 않지만 가장 먼저 떠오른 것입니다.