단점 - json 파일 에 주석



JSON에서 주석을 사용할 수 있습니까? (20)

ASP.NET과 함께 Newtonsoft.Json 라이브러리를 사용하여 읽고 / 역 직렬화하면 JSON 컨텐트에서 주석을 사용할 수 있습니다.

// "name": "string"

// "id": int

또는

/* 이것은

주석 예제 * /

추신 : 단선 주석은 Newtonsoft Json의 6 개 이상의 버전에서만 지원됩니다.

기본적으로 생각할 수없는 사람들을위한 추가 참고 사항 : 내가 만든 ASP.NET 웹 응용 프로그램의 기본 설정에 JSON 형식을 사용합니다. 파일을 읽고 Newtonsoft 라이브러리로 설정 개체로 변환 한 다음 필요할 때 사용합니다.

JSON 파일 자체의 각 개별 설정에 대한 의견을 쓰는 것을 선호하며, 실제로 사용하는 라이브러리가 정상적인 경우 JSON 형식의 무결성을 신경 쓰지 않습니다.

필자는 별도의 'settings.README'파일을 만들고 설정을 설명하는 것보다 '사용하기 쉽고 이해하기 쉬운'방법이라고 생각합니다.

이런 종류의 사용에 문제가 있다면; 죄송합니다, 요정은 램프에서 벗어났습니다. 사람들은 JSON 형식에 대한 다른 용도를 찾을 수 있습니다.

JSON 파일에서 주석을 사용할 수 있습니까? 그렇다면 어떻게?


JSON 라이브러리에 따라 다릅니다. Json.NET 은 JavaScript 스타일의 주석 인 /* commment */ 합니다.

다른 질문을 참조하십시오.


JSON은 주석을 기본적으로 지원하지 않지만 주석을 무시하기 위해 자체 디코더 또는 적어도 전 처리기를 만들 수 있습니다. 주석을 무시하고 응용 프로그램에서 JSON 데이터를 처리하는 방법을 안내하지 않는 한 완벽하게 좋습니다 ).

JSON에는 주석이 없습니다. JSON 인코더는 주석을 출력해서는 안됩니다. JSON 디코더는 주석을 받아들이고 무시할 수 있습니다 (MAY).

댓글을 의미있는 것으로 전송하는 데 절대로 사용해서는 안됩니다. 이것이 바로 JSON의 목적입니다.

Cf : JSON 사양 작성자 인 Douglas Crockford .


JSON은 주석을 지원하지 않습니다. 또한 주석이 필요할 구성 파일에 사용되지 않았습니다.

Hjson은 인간을위한 구성 파일 형식입니다. 편안한 구문, 적은 실수, 더 많은 의견.

JavaScript, Java, Python, PHP, Rust, Go, Ruby 및 C # 라이브러리는 hjson.org 를 참조하십시오.


YAML 사용을 고려하십시오. 거의 JSON (사실상 유효한 모든 JSON은 유효한 YAML 임)의 상위 집합이며 주석을 허용합니다.


난 그냥 구성 파일에 대한이 발생합니다. 필자는 XML (장황하거나, 그래픽, 못생긴, 읽기 어려움) 또는 "ini"형식 (계층 구조가 없거나 실제 표준이 없음) 또는 Java "속성"형식 (예 : .ini)을 사용하고 싶지 않습니다.

JSON은 할 수있는 모든 것을 할 수 있지만 장황하고 인간이 읽을 수있는 방법은 아닙니다. 파서는 쉽고 유비쿼터스 언어입니다. 그것은 단지 하나의 데이터 트리입니다. 그러나 대역 외 의견은 "기본"구성 등을 문서화하는 데 종종 필요합니다. 구성은 "전체 문서"가 될 필요는 없지만 필요한 경우 사람이 읽을 수있는 저장된 데이터의 트리입니다.

나는 "#": "comment" 를 "valid"JSON으로 사용할 수 있다고 생각합니다.


당신은 할 수 없습니다. 적어도 그것은 JSON.org 에서의 빠른 경험을 통해 얻은 나의 경험입니다.

JSON의 구문은 해당 페이지에서 시각화됩니다. 댓글에 대한 메모가 없습니다.


대신 JSON 스키마 를 작성해야합니다. JSON 스키마는 현재 제안 된 인터넷 초안 사양입니다. 문서 외에도 JSON 데이터의 유효성 검사에 스키마를 사용할 수 있습니다.

예:

{
    "description":"A person",
    "type":"object",
    "properties":
        {
            "name":
                {
                    "type":"string"
                },
            "age":
                {
                    "type":"integer",
                    "maximum":125
                }
        }
}

설명 스키마 속성을 사용하여. 서를 제공 할 수 있습니다.


면책 조항 : 귀하의 보증이 무효입니다.

지적했듯이이 해킹은 사양 구현을 이용합니다. 모든 JSON 파서가 이러한 종류의 JSON을 이해하는 것은 아닙니다. 특별히 파서를 스트리밍하는 것은 질식사가됩니다.

흥미로운 호기심입니다.하지만 실제로는 전혀 사용하지 않아야합니다 . 아래는 원래의 대답입니다.

파싱에 영향을주지 않는 주석을 JSON 파일에 배치하거나 어떤 식 으로든 표현되는 데이터를 변경할 수있는 작은 해킹을 발견했습니다.

객체 리터럴을 선언 할 때 동일한 키로 두 개의 값을 지정할 수 있으며 마지막 하나가 우선합니다. 믿거 나 말거나, JSON 파서는 같은 방식으로 작동합니다. 그래서 이것을 사용하여 소스 JSON에서 파싱 된 객체 표현에 존재하지 않는 주석을 생성 할 수 있습니다.

({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length; 
// => 1

이 기술을 적용하면 주석 처리 된 JSON 파일은 다음과 같이 보일 수 있습니다.

{
  "api_host" : "The hostname of your API server. You may also specify the port.",
  "api_host" : "hodorhodor.com",

  "retry_interval" : "The interval in seconds between retrying failed API calls",
  "retry_interval" : 10,

  "auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
  "auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",

  "favorite_numbers": "An array containing my all-time favorite numbers",
  "favorite_numbers": [19, 13, 53]
}

위의 코드는 유효한 JSON 입니다. 구문 분석하면 다음과 같은 객체가 생성됩니다.

{
    "api_host": "hodorhodor.com",
    "retry_interval": 10,
    "auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
    "favorite_numbers": [19,13,53]
}

즉, 주석의 흔적이 없으며 이상한 부작용이 없을 것임을 의미합니다.

해피 해킹!


아니.

JSON은 모두 데이터이어야하며 주석을 포함하면 데이터도됩니다.

JSON 데이터를 사용하는 응용 프로그램에서 무시되는 "_comment" (또는 뭔가)라는 지정된 데이터 요소가있을 수 있습니다.

JSON을 생성 / 수신하는 프로세스에 주석을 추가하는 것이 더 좋을 것입니다. JSON 데이터가 미리 무엇인지, 아니면 적어도 JSON 구조가 무엇인지 알기로되어 있기 때문입니다.

그러나 결정한 경우 :

{
   "_comment": "comment text goes here...",
   "glossary": {
      "title": "example glossary",
      "GlossDiv": {
         "title": "S",
         "GlossList": {
            "GlossEntry": {
               "ID": "SGML",
               "SortAs": "SGML",
               "GlossTerm": "Standard Generalized Markup Language",
               "Acronym": "SGML",
               "Abbrev": "ISO 8879:1986",
               "GlossDef": {
                  "para": "A meta-markup language, used to create markup languages such as DocBook.",
                  "GlossSeeAlso": ["GML", "XML"]
               },
               "GlossSee": "markup"
            }
         }
      }
   }
}

주석은 설계 상 JSON에서 삭제되었습니다.

JSON에서 주석을 제거했는데, 사람들이 구문 분석 지시문을 사용하여 상호 운용성을 파괴했을 수 있다는 것을 알았 기 때문입니다. 나는 의견의 부족이 어떤 사람들을 슬프게 만든다는 것을 알고 있지만, 그렇게해서는 안된다.

JSON을 사용하여 주석을 달고 싶은 구성 파일을 보관한다고 가정합니다. 원하는 의견을 모두 입력하십시오. 그런 다음 JSMin을 통해 JSON 구문 분석기로 전달합니다.

출처 : plus.google.com/118095276221607585885/posts/RK8qyGVaGSr


한숨. 왜 필드를 추가하지 않는가?

{
    "note1" : "This demonstrates the provision of annotations within a JSON file",
    "field1" : 12,
    "field2" : "some text",

    "note2" : "Add more annotations as necessary"
}

"notex"이름이 실제 필드와 충돌하지 않는지 확인하십시오.


JSON은 프레임 프로토콜이 아닙니다 . 이것은 언어가없는 형식 입니다. 따라서 주석 형식은 JSON에 정의되어 있지 않습니다.

많은 사람들이 제안했듯이 중복 키 또는 _comment사용할 수 있는 특정 키와 같은 몇 가지 트릭 이 있습니다. 그것은 당신에게 달려 있습니다.


선택하면 댓글을 포함하십시오. 파싱하거나 전송하기 전에 minifier로 그들을 제거하십시오.

방금 JSON 블록에서 주석과 공백을 제거하고 파싱 할 수있는 유효한 JSON으로 만드는 JSON.minify() 를 발표했습니다. 따라서 다음과 같이 사용할 수 있습니다.

JSON.parse(JSON.minify(my_str));

내가 그것을 발표했을 때, 나는 아이디어에 동의하지 않는 사람들의 거센 반발을 얻었 기 때문에 JSON에서 주석이 왜 중요한지에 대한 포괄적 인 블로그 게시물을 작성하기로 결정했다. 여기에는 JSON 작성자의 주목할만한 의견이 포함되어 있습니다.

JSON을 사용하여 주석을 달고 싶은 구성 파일을 보관한다고 가정합니다. 원하는 의견을 모두 입력하십시오. 그런 다음 JSMin을 통해 JSON 구문 분석기로 전달합니다. - plus.google.com/118095276221607585885/posts/RK8qyGVaGSr

다행히 JSON.minify () 가 유용 할 수있는 이유에 동의하지 않는 사람들에게 도움이 되기를 바랍니다 .


JSON 항목을 부분으로 잘라내려면 "더미 주석"행을 추가하십시오.

{

"#############################" : "Part1",

"data1"             : "value1",
"data2"             : "value2",

"#############################" : "Part2",

"data4"             : "value3",
"data3"             : "value4"

}

JSON은 유비쿼터스이고 XML보다 훨씬 간단하기 때문에 구성 파일 및 기타 로컬 사용에 대해 많은 의미가 있습니다.

사람들이 데이터를 교환 할 때 (유효하든 그렇지 않든) JSON에 주석을 추가하는 것에 대한 강한 이유가있는 경우 JSON을 두 가지로 나눌 수 있습니다.

  • JSON-COM : 유선에 연결된 JSON 또는 JSON 데이터를 통신 할 때 적용되는 규칙.
  • JSON-DOC : JSON 문서 또는 JSON이 파일 또는 로컬에 있습니다. 유효한 JSON 문서를 정의하는 규칙.

JSON-DOC는 주석을 허용하고 공백을 처리하는 것과 같은 사소한 차이가있을 수 있습니다. 파서는 한 스펙에서 다른 스펙으로 쉽게 변환 할 수 있습니다.

Douglas Crockford가이 문제 (@Artur Czajka에 의해 참조 됨)에 대한 plus.google.com/118095276221607585885/posts/RK8qyGVaGSr 과 관련하여,

JSON을 사용하여 주석을 달고 싶은 구성 파일을 보관한다고 가정합니다. 원하는 의견을 모두 입력하십시오. 그런 다음 JSMin을 통해 JSON 구문 분석기로 전달합니다.

우리는 일반적인 설정 파일 문제 (크로스 언 H / 플랫폼)에 대해 말하고 있으며 JS 특정 유틸리티로 응답하고 있습니다!

JSON 전용 minify는 모든 언어로 구현할 수 있지만이를 표준화하여 모든 언어 및 플랫폼에서 파서를 통해 유비쿼터스화할 수 있으므로 사용 사례가 많아 문제를 찾지 않아도 시간이 낭비되는 것을 막을 수 있습니다. 온라인 포럼 및 사람들에게 나쁜 생각이라고 말하거나 텍스트 파일에서 주석을 제거하는 방법을 쉽게 구현할 것을 제안합니다.

다른 문제는 상호 운용성입니다. 라이브러리 나 API 또는 이와 관련된 일부 구성 또는 데이터 파일이있는 모든 종류의 하위 시스템이 있다고 가정합니다. 이 하위 시스템은 다른 언어로 액세스 할 수 있습니다. 그렇다면 JSON 파일을 파서에 전달하기 전에 주석을 제거하는 것을 잊지 마세요.


Dojo Toolkit JavaScript 툴킷 (적어도 버전 1.4 이상)을 사용하면 JSON에 주석을 포함 할 수 있습니다. 주석은 /* */형식 일 수 있습니다 . Dojo Toolkit은 dojo.xhrGet()호출을 통해 JSON을 사용한다 .

다른 JavaScript 툴킷도 비슷하게 작동 할 수 있습니다.

이는 최종 옵션을 선택하기 전에 대체 데이터 구조 (또는 데이터 목록)를 실험 할 때 유용 할 수 있습니다.


JSON의 저자는 JSON에 주석을 포함하고 싶지만 주석을 파싱하기 전에 주석을 제거해야합니다 ( Michael Burr가 제공하는 plus.google.com/118095276221607585885/posts/RK8qyGVaGSr 참조 ). JSON에 주석이 있어야한다면 표준화하지 말고 JSON 구문 분석기로 작업하게하십시오. 나는 그 논리에 동의하지 않지만, 아아, 그게 표준이다. 다른 사람들이 제안한대로 YAML 솔루션을 사용하는 것은 좋지만 라이브러리 의존성이 필요합니다.

주석을 제거하고 싶지만 라이브러리 의존성을 원하지 않는 경우 다음은 C ++ 스타일 주석에 대해 작동하지만 다른 주석에 적용 할 수있는 두 줄 솔루션입니다.

var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));

이 솔루션은 JSON 데이터에 주석 작성 프로그램이 없다는 것을 확신 할 수있는 경우에만 사용할 수 있습니다 (예 : ( '//')).

JSON 구문 분석, 주석 제거 및 추가 라이브러리가 필요없는 또 다른 방법은 JavaScript 인터프리터에서 JSON을 평가하는 것입니다. 물론 그 접근법에 대한주의 사항은 사용자가 입력하지 않은 데이터 (신뢰할 수없는 사용자 입력 없음) 만 평가하려는 것입니다. 다음은 Node.js에서의이 접근법의 예입니다. 다른 예에서 다음 예제는 데이터를 한 번만 읽은 다음 캐시됩니다.

data = require(fs.realpathSync(doctree_fp));

우리는 strip-json-comments우리 프로젝트에 사용 하고 있습니다. 그것은 다음과 같은 것을 지원합니다 :

/*
 * Description 
*/
{
    // rainbows
    "unicorn": /* ❤ */ "cake"
}

npm install --save strip-json-comments설치하고 사용하기 만하면 됩니다.

var strip_json_comments = require('strip-json-comments')
var json = '{/*rainbows*/"unicorn":"cake"}';
JSON.parse(strip_json_comments(json));
//=> {unicorn: 'cake'}

유효한 JSON 인 솔루션 (해킹)이 있습니다. 같은 키를 두 번 이상 만드십시오. 예 :

{
  "param" : "This is the comment place",
  "param" : "This is value place",
}

JSON은 이것을 다음과 같이 이해할 것입니다.

{
  "param" : "This is value place",
}




comments