programing

JSON에서 코멘트를 사용할 수 있습니까?

fastcode 2023. 4. 5. 22:21
반응형

JSON에서 코멘트를 사용할 수 있습니까?

JSON 파일 내의 코멘트를 사용할 수 있습니까?만약 그렇다면, 어떻게?

아니요.

JSON은 데이터 전용입니다.코멘트를 포함한 경우는, 데이터도 필요합니다.

요소에는 '있다'라는 지정 수 ."_comment"JSON 데이터를 사용하는 앱에서 무시해야 할 사항입니다.

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"
            }
         }
      }
   }
}

아니요, 폼의 코멘트//… ★★★★★★★★★★★★★★★★★」/*…*/할 수 .은 다음과 같은 것을 있습니다.

  • https://www.json.org
  • RFC 4627:application/json 타입 JavaScript Notation( 자바스크립트
  • RFC 8259 자바스크립트 객체 표기법(JSON) 데이터 교환 형식(RFC 4627, 7158, 7159를 대체함)

필요에 따라서 코멘트를 포함합니다.파싱 또는 송신하기 전에, 코멘트를 Minifier로 삭제합니다.

방금 JSON.minify()를 출시했습니다.JSON 블록에서 코멘트와 공백 공간을 제거하고 해석 가능한 유효한 JSON을 만듭니다.따라서 다음과 같이 사용할 수 있습니다.

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

발매했을 때, 그 아이디어조차 반대하는 사람들의 반발이 컸기 때문에, JSON의 코멘트가 이치에 맞는지에 대해 종합적인 블로그 투고를 하기로 했습니다.여기에는 JSON 작성자의 다음과 같은 코멘트가 포함되어 있습니다.

JSON을 사용하여 주석을 붙이고 싶은 설정 파일을 보관하고 있다고 가정합니다.마음에 드는 댓글을 모두 삽입해 주세요.그런 다음 JSON 파서에 전달하기 전에 JSMin을 통해 파이프를 연결합니다. - 더글라스 크록포드, 2012

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

코멘트는 JSON에서 의도적으로 삭제되었습니다.

JSON에서 코멘트를 삭제한 것은 사람들이 파싱 디렉티브를 유지하기 위해 코멘트를 사용하고 있기 때문입니다.이것은 상호 운용성을 해치는 관행입니다.댓글 부족이 어떤 사람들을 슬프게 한다는 것을 알지만, 그러면 안 된다.

JSON을 사용하여 주석을 붙이고 싶은 설정 파일을 보관하고 있다고 가정합니다.마음에 드는 댓글을 모두 삽입해 주세요.그런 다음 JSMin을 통해 파이프를 연결하고 JSON 파서로 전달합니다.

출처 : G+에 관한 Douglas Crockford의 대국민 성명.

JSON은 코멘트를 지원하지 않습니다.코멘트가 필요한 컨피규레이션파일에 사용하는 것도 의도되지 않았습니다.

Hjson은 인간을 위한 구성 파일 형식입니다.구문 완화, 오류 감소, 댓글 증가

Hjson 인트로

JavaScript, Java, Python, PHP, Rust, Go, Ruby, C++ 및 C# 라이브러리에 대해서는, hjson.github.io 를 참조해 주세요.

면책사항: 귀하의 보증은 무효입니다.

지적한 바와 같이, 이 해킹은 스펙의 실장을 이용하고 있습니다.모든 JSON 파서가 이러한 종류의 JSON을 이해하는 것은 아닙니다.특히 스트리밍 파서는 질식합니다.

흥미로운 호기심이지만, 어떤 용도로도 사용해서는 안 됩니다.다음은 원본 답변입니다.


파싱에 영향을 주지 않는 코멘트를 JSON 파일에 넣을 수 있는 작은 해킹을 찾았습니다.또한 어떤 방식으로든 데이터를 변경할 수 있습니다.

오브젝트 리터럴을 선언할 때는 같은 키를 사용하여2개의 값을 지정할 수 있으며 마지막 값이 우선됩니다.믿거나 말거나 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]
}

즉, 댓글의 흔적이 없고, 이상한 부작용도 없습니다.

해킹을 축하합니다!

YAML을 사용하는 것을 검토해 주십시오.이것은 거의 JSON의 슈퍼셋(실제로 모든 유효한 JSON은 유효한 YAML)이며 코멘트를 허용합니다.

그럴수는 없어요.적어도 json.org에서 한눈에 본 경험입니다.

JSON의 구문은 이 페이지에 표시되어 있습니다.댓글에 대한 메모가 없습니다.

C++ 스타일의 코멘트를 지원하는 파서도 있습니다만, 코멘트는 공식 규격은 아닙니다.제가 사용하는 것은 JsonCpp입니다.예시는 다음과 같습니다.

// Configuration options
{
    // Default encoding for text
    "encoding" : "UTF-8",

    // Plug-ins loaded at start-up
    "plug-ins" : [
        "python",
        "c++",
        "ruby"
        ],

    // Tab indent size
    "indent" : { "length" : 3, "use_space": true }
}

jsonlint는 이를 검증하지 않습니다.따라서 코멘트는 파서 고유의 확장이며 표준이 아닙니다.

또 다른 파서는 JSON5입니다.

JSON TOML의 대체 수단.

또 다른 대안은 jsonc입니다.

nlohmann/json의 최신 버전에서는 구문 해석에 대한 코멘트를 무시하는 옵션이 지원됩니다.

Google Firebase 문서에서 찾은 JSON에 코멘트를 넣을 수 있는 내용은 다음과 같습니다.

{
  "//": "Some browsers will use this to enable push notifications.",
  "//": "It is the same for all projects, this is not your project's sender ID",
  "gcm_sender_id": "1234567890"
}

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

예:

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

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

Jackson을 JSON 파서로 사용하는 경우 다음과 같이 코멘트를 허용합니다.

ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);

그러면 다음과 같은 코멘트를 할 수 있습니다.

{
  key: "value" // Comment
}

은 ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ로 하는 댓글.#★★★★

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

그러나 일반적으로 (앞에서 답변한 바와 같이) 사양에서는 코멘트를 허용하지 않습니다.

아니요. JSON은 댓글을 지원하곤 했지만, 댓글은 남용되어 기준에서 제외되었습니다.

JSON 작성자:

JSON에서 코멘트를 삭제한 것은 사람들이 파싱 디렉티브를 유지하기 위해 코멘트를 사용하고 있기 때문입니다.이것은 상호 운용성을 해치는 관행입니다.댓글 부족이 어떤 사람들을 슬프게 한다는 것을 알지만, 그렇게 해서는 안 된다. - 더글라스 크록포드, 2012

공식 JSON 사이트는 JSON.org 입니다.JSON은 ECMA International에 의해 표준으로 정의되어 있습니다.기준을 개정하기 위한 청원 절차는 항상 있다.몇 가지 이유로 주석이 JSON 표준에 추가될 가능성은 낮다.

설계상 JSON은 XML의 리버스 엔지니어링(인간의 해석)을 쉽게 대체할 수 있는 설계입니다.주석이 불필요할 정도로 단순화되어 있습니다.그것은 심지어 마크업 언어도 아니다.목표는 안정성과 상호운용성입니다.

객체 지향의 "has-a" 관계를 이해하는 사람은 어떤 JSON 구조도 이해할 수 있습니다.그것이 요점입니다.이는 노드 태그(키/값 쌍)가 있는 DAG(Directed Acyclic Graph)에 불과하며, 이는 거의 범용적인 데이터 구조입니다.

필요한 주석은 "//이게 DAG 태그입니다"뿐일 수 있습니다.키 이름은 필요한 만큼 정보를 제공하므로 임의의 의미적 특성을 사용할 수 있습니다.

어떤 플랫폼에서도 코드 몇 줄만으로 JSON을 해석할 수 있습니다.XML에는 많은 플랫폼에서 실행할 수 없는 복잡한 OO 라이브러리가 필요합니다.

주석을 달면 JSON의 상호 운용성이 떨어집니다.정말로 필요한 것이 마크업 언어(XML)가 아니고, 보관 유지된 데이터가 쉽게 해석되어도 상관없습니다.

그러나 JSON의 설립자 역시 관찰했듯이, 코멘트에 대한 JS 파이프라인 지원은 항상 있어 왔습니다.

마음에 드는 댓글을 모두 삽입해 주세요.그런 다음 JSON 파서에 전달하기 전에 JSMin을 통해 파이프를 연결합니다. - 더글라스 크록포드, 2012

만약 당신이 뉴턴소프트를 사용하고 있다면.ASP 탑재 Json 라이브러리NET 읽기/비직렬화를 위해 JSON 콘텐츠의 주석을 사용할 수 있습니다.

//"name": "string"

//"id": int

또는

/* 이거는

코멘트 예 */

PS: Newtonsoft Json의 6개 이상의 버전에서만 한 줄의 코멘트가 지원됩니다.

즉석에서 생각할 없는 분들을 위한 추가 주의: ASP의 기본 설정에는 JSON 형식을 사용합니다.내가 만든 NET 웹 어플리케이션파일을 읽고 Newtonsoft 라이브러리에서 설정 객체로 변환하여 필요에 따라 사용합니다.

JSON 파일 자체에 개별 설정에 대한 코멘트를 쓰는 것을 선호하며, 사용하는 라이브러리가 문제가 되지 않는 한 JSON 포맷의 무결성은 전혀 신경 쓰지 않습니다.

이 방법은 별도의 '설정'을 작성하는 것보다 '사용/이해하기 쉬운' 방식이라고 생각합니다.README' 파일 및 파일 내의 설정을 설명합니다.

이러한 사용법에 문제가 있는 경우, 죄송합니다. 램프가 꺼졌습니다.JSON 포맷의 다른 용도를 찾을 수 있기 때문에 어쩔 수 없습니다.

JSON 문자열인 텍스트 파일을 어떤 프로그램에서 읽을 경우, 사용하기 전에 C 또는 C++ 스타일의 코멘트를 삭제하는 것이 얼마나 어렵습니까?

답변: 1개의 라이너입니다.이렇게 하면 JSON 파일을 구성 파일로 사용할 수 있습니다.

JSON의 배후에 있는 아이디어는 애플리케이션 간에 단순한 데이터 교환을 제공하는 것입니다.이들은 일반적으로 웹 기반이며 언어는 JavaScript입니다.

이러한 코멘트는 실제로 허용되지 않지만 데이터 내의 이름/값 쌍 중 하나로 코멘트를 전달하는 것은 확실히 기능합니다.다만, 그 데이터는 분명히 무시하거나, 특히 구문 분석 코드에 의해서 처리될 필요가 있습니다.

JSON 파일에 전통적인 의미의 코멘트가 포함되어 있는 것은 아닙니다.그냥 데이터일 거예요

자세한 내용은 JSON 웹사이트를 참조하십시오.

JSON은 기본적으로 코멘트를 지원하지 않지만 자체 디코더 또는 코멘트를 삭제하는 프리프로세서를 만들 수 있습니다(코멘트를 무시하고 애플리케이션이 JSON 데이터를 처리하는 방법을 안내하는 데 사용하지 않는 한).

JSON에는 코멘트가 없습니다.JSON 인코더는 코멘트를 출력해서는 안 됩니다.JSON 디코더는 코멘트를 받아들이거나 무시할 수 있습니다.

코멘트는, 의미 있는 송신에 사용하지 말아 주세요.그게 JSON의 목적입니다.

더글라스 크록포드, JSON 스펙의 저자.

컨피규레이션파일에서 이 문제가 발생했습니다.XML(상세, 그래픽, 보기 어렵고 읽기 어려운) 또는 "ini" 형식(계층 없음, 실제 표준 없음 등)이나 Java "Properties" 형식(.ini 등)은 사용하지 않습니다.

JSON은 할 수 있는 모든 것을 할 수 있지만, 장황하고 인간적인 가독성이 훨씬 낮습니다.파서는 여러 언어에서 쉽고 어디서나 볼 수 있습니다.그냥 데이터 트리일 뿐이에요.그러나 아웃 오브 밴드 코멘트는 디폴트 설정 등을 문서화하기 위해 필요한 경우가 많습니다.구성은 "전체 문서"가 아니라 필요에 따라 사람이 읽을 수 있는 저장된 데이터의 트리입니다.

"#": "comment" 「 「유효한」JSON의 경우.

JSON 라이브러리에 따라 다릅니다.Json.NET은 JavaScript 스타일의 코멘트를 지원합니다./* commment */.

다른 스택 오버플로우 질문을 참조하십시오.

, 새로운 표준인 JSON5에서는 C++ 스타일의 코멘트를 사용할 수 있습니다.다른 많은 확장기능도 있습니다.

// A single line comment.

/* A multi-
   line comment. */

JSON5 Data Interchange Format(JSON5)은 JSON의 일부 제한을 완화하는 것을 목적으로 하는 JSON의 슈퍼셋입니다.이는 완전히 하위 호환성이 있으며, 커스텀 비표준 파서를 쓰거나 기존 파서에 대해 비표준 기능을 켜거나 문자열 필드 등의 다양한 해크를 사용하여 주석을 다는 것보다 훨씬 나을 수 있습니다.또는 사용 중인 파서가 지원하는 경우 JSONC++ 스타일의 코멘트인 JSON 5 서브셋을 사용하는 것에 동의하면 됩니다.이것은 우리가 적합하다고 생각하는 방식으로 JSON 표준을 조정하는 것보다 훨씬 낫다.

npm 패키지, Python 패키지, Java 패키지 및 C 라이브러리가 이미 있습니다.하위 호환성이 있습니다.공식 JSON 제한을 계속 유지할 이유가 없습니다.

JSON에서 코멘트를 삭제하는 것은 Java에서 오퍼레이터 오버로드를 제거하는 것과 같은 이유로 이루어졌다고 생각합니다.오퍼레이터 오버로드를 제거하는 것은 잘못된 방법으로 사용될 수 있지만, 명백히 정당한 사용 사례는 간과되고 있습니다.연산자 오버로드의 경우 행렬 대수와 복소수입니다.JSON 코멘트의 경우 구성 파일 및 기타 문서를 파서가 아닌 사람이 작성, 편집 또는 읽을 수 있습니다.

JSON은 어디서나 사용할 수 있고 XML보다 훨씬 단순하기 때문에 구성 파일 및 기타 로컬 사용에 매우 적합합니다.

데이터 통신 시 JSON에 코멘트가 있는 것을 반대하는 강력한 이유가 있는 경우(유효 여부에 관계없이), JSON은 다음 두 가지로 분할될 수 있습니다.

  • JSON-COM: 유선상의 JSON 또는 JSON 데이터 통신 시 적용되는 규칙.
  • JSON-DOC: JSON 문서 또는 파일 또는 로컬의 JSON.유효한 JSON 문서를 정의하는 규칙.

JSON-DOC 에서는 코멘트가 허용되며 공백 처리 등 기타 사소한 차이가 있을 수 있습니다.파서는 하나의 스펙에서 다른 스펙으로 쉽게 변환할 수 있습니다.

이 문제에 관한 더글라스 크록포드의 발언에 대해 (@Artur Czajka 참조)

JSON을 사용하여 주석을 붙이고 싶은 설정 파일을 보관하고 있다고 가정합니다.마음에 드는 댓글을 모두 삽입해 주세요.그런 다음 JSMin을 통해 파이프를 연결하고 JSON 파서로 전달합니다.

일반적인 구성 파일 문제(교차 언어/플랫폼)에 대해 이야기하고 있는데 JS 고유의 유틸리티로 답변하고 있습니다.

JSON 고유의 Minify는 어느 언어에서도 실장할 수 있습니다.다만, 이것을 표준화해 두면, 모든 언어나 플랫폼의 파서 전체에 널리 퍼질 수 있기 때문에, 그 기능이 없는 채로 시간을 낭비하는 일이 없어집니다.사용 사례가 좋기 때문에, 온라인 포럼에서 이 문제를 찾고 있기 때문입니다.나쁜 생각이라고 말하게 하거나 텍스트 파일에서 코멘트를 삭제하는 것이 쉽다고 제안합니다.

또 다른 문제는 상호 운용성입니다.라이브러리, API 또는 이와 관련된 구성 또는 데이터 파일이 있는 모든 종류의 서브시스템이 있다고 가정합니다.그리고 이 서브시스템은 다른 언어로 접근해야 합니다.그 후, 파서에게 전달하기 전에, JSON 파일의 코멘트를 삭제하는 것을 잊지 말아 주세요.

JSON5 를 사용하는 경우는, 코멘트를 포함할 수 있습니다.


JSON5는 인간이 손으로 글을 쓰고 유지 관리하는 것을 목적으로 하는 JSON의 제안된 확장입니다.이를 위해 ECMAScript 5에서 직접 최소한의 구문 기능을 추가합니다.

Dojo Toolkit JavaScript(JSON 1.4)입니다.코멘트는 다음과 같습니다./* */ Toolkit은 Dojo 통해 JSON을 소비합니다.dojo.xhrGet()discl.discl.discl을 클릭합니다.

다른 JavaScript 툴킷도 마찬가지로 동작합니다.

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

JSON은 프레임 프로토콜이 아닙니다.이것은 언어가 필요 없는 형식입니다.따라서 JSON에 대한 코멘트 형식은 정의되어 있지 않습니다.

했듯이, 중복된 키 같은. 예를 들어, 중복 키나 특정 키입니다._comment사용할 수 있습니다.츠미야

면책사항:이건 말도 안 돼

코멘트를 추가하고, 사양에 준거하는 방법이 있습니다(추가 파서는 필요 없습니다.해석하지 않으면 사람이 읽을 수 있는 코멘트가 되지 않습니다.

다음 사항을 악용할 수 있습니다.

토큰 앞 또는 뒤에는 중요하지 않은 공백이 허용됩니다.공백은 문자표(U+0009), 줄바꿈(U+000A), 캐리지 리턴(U+000D) 및 공간(U+0020) 중 하나 이상의 코드 포인트 시퀀스입니다.

이것을 악용하여 코멘트를 추가할 수 있습니다.예: 탭으로 코멘트를 시작하고 종료합니다.주석을 base3으로 인코딩하고 다른 공백 문자를 사용하여 표시합니다.예를 들어.

010212 010202 011000 011000 011010 001012 010122 010121 011021 010202 001012 011022 010212 011020 010202 010202

)hello base threeASCII) 단, 공간을 0으로 사용하는 대신 줄 바꿈을 1로 사용하고 캐리지 리턴을 2로 사용합니다.

이렇게 하면 읽을 수 없는 공백이 많이 남습니다(IDE 플러그인을 만들어 즉시 인코딩/복호화하지 않는 한).

난 이걸 시도조차 하지 않았어, 명백한 이유 때문이지. 너도 그래선 안 돼.

JSONP에서는 코멘트를 할 수 있지만 순수 JSON에서는 할 수 없습니다.하이차트의 이 예시로 프로그램을 작동시키기 위해 1시간을 소비했습니다.

링크를 따라가면

?(/* AAPL historical OHLC data from the Google Finance API */
[
/* May 2006 */
[1147651200000,67.79],
[1147737600000,64.98],
...
[1368057600000,456.77],
[1368144000000,452.97]
]);

로컬 폴더에 같은 파일이 있었기 때문에, 같은 발신기지 정책에 문제가 없었기 때문에, 순수 JSON을 사용하기로 했습니다.물론,$.getJSON★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

으로 위의 이 HTTP content-type임을 되었습니다.text/javascriptJSONP는 순수 JavaScript를 반환하기 때문입니다.이 경우 코멘트가 허용됩니다.그러나 응용 프로그램에서 콘텐츠 유형을 반환했습니다.application/json그래서 댓글을 지워야 했어요.

JSON은 댓글 자체를 허용하지 않습니다.JSON 자체를 사용해 코멘트를 작성할 수 있기 때문에, 코멘트가 있는 JSON 파일 등, 완전히 같은 결과나 잠재적인 문제에 대해서, 정당한 이유 없이 파서 데이터 공간을 로드할 수 있기 때문에, 논리는 전혀 바보 같습니다.

(「」를 사용해 .// ★★★★★★★★★★★★★★★★★」/* */ ★★★★★★★★★★★★★★★★★」#예를 들어)는 JSON 사양에 엄밀하게 포함되지 않기 때문에 일부 파서가 실패합니다.그러니까 절대 그러면 안 요.

를 들어, 이미지 조작 시스템이 이미지 표기 및 이와 관련된 기본적인 포맷(댓글) 정보를 저장한 경우(아래쪽에 있음):

{
    "Notations": [
        {
            "anchorX": 333,
            "anchorY": 265,
            "areaMode": "Ellipse",
            "extentX": 356,
            "extentY": 294,
            "opacity": 0.5,
            "text": "Elliptical area on top",
            "textX": 333,
            "textY": 265,
            "title": "Notation 1"
        },
        {
            "anchorX": 87,
            "anchorY": 385,
            "areaMode": "Rectangle",
            "extentX": 109,
            "extentY": 412,
            "opacity": 0.5,
            "text": "Rect area\non bottom",
            "textX": 98,
            "textY": 385,
            "title": "Notation 2"
        },
        {
            "anchorX": 69,
            "anchorY": 104,
            "areaMode": "Polygon",
            "extentX": 102,
            "extentY": 136,
            "opacity": 0.5,
            "pointList": [
                {
                    "i": 0,
                    "x": 83,
                    "y": 104
                },
                {
                    "i": 1,
                    "x": 69,
                    "y": 136
                },
                {
                    "i": 2,
                    "x": 102,
                    "y": 132
                },
                {
                    "i": 3,
                    "x": 83,
                    "y": 104
                }
            ],
            "text": "Simple polygon",
            "textX": 85,
            "textY": 104,
            "title": "Notation 3"
        }
    ],
    "imageXW": 512,
    "imageYW": 512,
    "imageName": "lena_std.ato",
    "tinyDocs": {
        "c01": "JSON image notation data:",
        "c02": "-------------------------",
        "c03": "",
        "c04": "This data contains image notations and related area",
        "c05": "selection information that provides a means for an",
        "c06": "image gallery to display notations with elliptical,",
        "c07": "rectangular, polygonal or freehand area indications",
        "c08": "over an image displayed to a gallery visitor.",
        "c09": "",
        "c10": "X and Y positions are all in image space. The image",
        "c11": "resolution is given as imageXW and imageYW, which",
        "c12": "you use to scale the notation areas to their proper",
        "c13": "locations and sizes for your display of the image,",
        "c14": "regardless of scale.",
        "c15": "",
        "c16": "For Ellipses, anchor is the  center of the ellipse,",
        "c17": "and the extents are the X and Y radii respectively.",
        "c18": "",
        "c19": "For Rectangles, the anchor is the top left and the",
        "c20": "extents are the bottom right.",
        "c21": "",
        "c22": "For Freehand and Polygon area modes, the pointList",
        "c23": "contains a series of numbered XY points. If the area",
        "c24": "is closed, the last point will be the same as the",
        "c25": "first, so all you have to be concerned with is drawing",
        "c26": "lines between the points in the list. Anchor and extent",
        "c27": "are set to the top left and bottom right of the indicated",
        "c28": "region, and can be used as a simplistic rectangular",
        "c29": "detect for the mouse hover position over these types",
        "c30": "of areas.",
        "c31": "",
        "c32": "The textx and texty positions provide basic positioning",
        "c33": "information to help you locate the text information",
        "c34": "in a reasonable location associated with the area",
        "c35": "indication.",
        "c36": "",
        "c37": "Opacity is a value between 0 and 1, where .5 represents",
        "c38": "a 50% opaque backdrop and 1.0 represents a fully opaque",
        "c39": "backdrop. Recommendation is that regions be drawn",
        "c40": "only if the user hovers the pointer over the image,",
        "c41": "and that the text associated with the regions be drawn",
        "c42": "only if the user hovers the pointer over the indicated",
        "c43": "region."
    }
}

이것은 "할 수 있나요?"라는 질문입니다.그리고 여기 "예"라는 대답이 있습니다.

아니요, 중복된 오브젝트 멤버를 사용하여 사이드 채널 데이터를 JSON 인코딩에 넣을 수 없습니다(RFC의 "개체 내 이름은 고유해야 합니다" 참조).

JSON 주위에 코멘트를 삽입하여 해석할 수 있습니다.

그러나 유효한 JSON에 임의의 사이드 채널 데이터를 삽입 및 추출하는 방법을 원하는 경우 다음과 같은 답이 있습니다.JSON 인코딩에서 데이터가 고유하지 않은 점을 활용합니다.이는 RFC 섹션2의 "6개의 구조 문자 중 하나 앞 또는 뒤에 공백이 허용됩니다"에서* 허용됩니다.

RFC에서는 스트링, 숫자, "false", "true" 및 "null"을 명시적으로 언급하지 않고 "6개의 구조 문자 앞 또는 뒤에 공백이 허용된다"고만 명시되어 *있습니다.이 누락은 모든 구현에서 무시됩니다.


먼저 JSON을 최소화하여 표준화합니다.

$jsonMin = json_encode(json_decode($json));

다음으로 코멘트를 바이너리로 인코딩합니다.

$hex = unpack('H*', $comment);
$commentBinary = base_convert($hex[1], 16, 2);

다음으로 바이너리를 설정합니다.

$steg = str_replace('0', ' ', $commentBinary);
$steg = str_replace('1', "\t", $steg);

출력은 다음과 같습니다.

$jsonWithComment = $steg . $jsonMin;

이 경우 JSON 출력 직전에 디버깅 목적으로 코멘트를 사용해야 합니다.따라서 클라이언트의 파손을 피하기 위해 HTTP 헤더에 디버깅 정보를 넣습니다.

header("My-Json-Comment: Yes, I know it's a workaround ;-) ");

여기에 이미지 설명을 입력하십시오.

우리는 우리의 프로젝트에 사용하고 있다.다음과 같은 기능을 지원합니다.

/*
 * 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'}

언급URL : https://stackoverflow.com/questions/244777/can-comments-be-used-in-json

반응형