[javascript] JSON 문서에 코멘트를 사용하는 방법

표준 JSON문서는 데이터를 표현하는 규격만 있으며, 코멘트를 작성하거나 표시하는 규격은 없습니다.

따라서 JSON 안에 코멘트를 표시하는 태그, 또는 작성 방법은 없습니다.

모든 문서가 그렇지만, 데이터만을 표현하는 JSON에도 JSON 키와 데이터 구조에 대한 설명을 작성해서 JSON 데이터를 사용하는 사용자에게 알릴 필요가 있습니다.

그래서 JSON 안에 코멘트를 작성하는 몇몇가지 융통성 있는 방법, 또는 편법을 사용합니다.

//로 코멘트 작성

대부분의 개발 언어에서 코멘트를 표시하는데 사용하는 "//" 표현 방식을 일부 JSON 파서에서 지원합니다. 사용하는 프레임워크, 또는 개발 라이브러리 단에서 JSON 안에 "//" 표현을 지원하면 "//" 코멘트 표시를 사용할 수 있습니다.

어디까지나 비표준적인 방법이므로 공개 배포를 하는 문서에는 사용하는 것은 비추천입니다.

// Options
{
    // Encoding
    "encoding" : "UTF-8",
    "background-color" : "#FFF",
    "text-color" : "#000",
    // Indentation
    "indentation" : { "length" : 4, "tab": 8 }
}

키로 코멘트 표현

표준으로 정해진 사용방법은 아니지만 관행적으로 코멘트를 표현하는 "_comment", 또는 "__comment" 처럼 한 개, 또는 두 개의 언더 바를 "comment" 앞에 붙여 키를 선언하면 밸류에 해당하는 내용은 코멘트로 처리를 하고 파서에서 무시를 하도록 합니다.

{
    "_comment" : "에디터 환경 설정 값",
    "encoding" : "UTF-8",
    "background-color" : "#FFF",
    "text-color" : "#000",
    "indentation" : { "_comment" : "indentation", "length" : 4, "tab": 8 }
}

//, /**/ 코멘트를 사용한 JSON 데이터를 파싱하기

"//", "/**/" 로 JSON 데이터에 작성한 코멘트를 정규표현식을 사용해서 다음처럼 코멘트 내용만 삭제한 후 JSON 객체로 변환할 수 있습니다.

let str_json = `// Options
{
    // Encoding
    "encoding" : "UTF-8",
    "background-color" : "#FFF",
    "text-color" : "#000",
    // Indentation
    "indentation" : { "length" : 4, "tab": 8 }
}`

// 정규표현식으로 코멘트 제거
str_json = str_json.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m);
let json = JSON.parse(str_json);
console.log(json);