Вопрос: Могут ли комментарии использоваться в JSON?


Могу ли я использовать комментарии в файле JSON? Если да, то как?


5666


источник


Ответы:


Нет.

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

3956



нет , комментарии формы //…или /*…*/в JSON запрещены. Этот ответ основан на:

  • http://www.json.org
  • RFC 4627 : application/jsonТип носителя для JavaScript Обозначение объекта (JSON)
  • RFC 7159 Формат обмена данными JavaScript (JSON) - Obsoletes: 4627, 7158

1543



Включать комментарии, если вы выберете; разметьте их с помощью мини-маркера перед разбором или передачей.

Я только что выпустил JSON.minify () который удаляет комментарии и пробелы из блока JSON и делает его действительным JSON, который может быть проанализирован. Таким образом, вы можете использовать его так:

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

Когда я выпустил его, я получил огромный резонанс от людей, которые не соглашались с идеей этого, поэтому я решил, что напишу всеобъемлющее сообщение в блоге о том, почему комментарии имеют смысл в JSON , Он включает в себя этот замечательный комментарий от создателя JSON:

Предположим, вы используете JSON для хранения файлов конфигурации, которые вы хотели бы комментировать. Вперед и вставьте все комментарии, которые вам нравятся. Затем пропустите его через JSMin, прежде чем передать его вашему парсера JSON. - Дуглас Крокфорд, 2012

Надеюсь, это полезно тем, кто не согласен с тем, почему JSON.minify () может быть полезным.


656



Комментарии были удалены из JSON по дизайну.

Я удалил комментарии от JSON, потому что видел, как люди использовали их для хранения директив синтаксического анализа, что могло бы повредить взаимодействие. Я знаю, что отсутствие комментариев заставляет некоторых людей печально, но это не должно.

Предположим, вы используете JSON для хранения файлов конфигурации, которые вы хотели бы комментировать. Вперед и вставьте все комментарии, которые вам нравятся. Затем пропустите его через JSMin, прежде чем передать его вашему парсера JSON.

Источник: Публичное заявление Дугласа Крокфорда о G +


369



ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: ВАША ГАРАНТИЯ ГОЛОСОВАНА

Как уже отмечалось, этот хак использует преимущества спецификации. Не все парнеры 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]
}

Это означает, что комментариев нет, и у них не будет странных побочных эффектов.

Счастливый взлом!


185



JSON не поддерживает комментарии. Он также никогда не предназначался для использования в файлах конфигурации, где нужны комментарии.

Hjson - это формат файла конфигурации для людей. Расслабленный синтаксис, меньше ошибок, больше комментариев.

Hjson intro

Видеть hjson.org для библиотек JavaScript, Java, Python, PHP, Rust, Go, Ruby и C #.


117



Вы не можете. По крайней мере, это мой опыт, быстро взглянув на json.org ,

JSON отображает синтаксис на этой странице. Нет комментариев о комментариях.


95



Consider using YAML. It's nearly a superset of JSON (virtually all valid JSON is valid YAML) and it allows comments.


84



You should write a JSON schema instead. JSON schema is currently a proposed Internet draft specification. Besides documentation, the schema can also be used for validating your JSON data.

Example:

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

You can provide documentation by using the description schema attribute.


54



If you are using Jackson as your JSON parser then this is how you enable it to allow comments:

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

Then you can have comments like this:

{
  key: "value" // comment
}

And you can also have comments starting with # by setting:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);    

But in general (as answered before) the spec does not allow comments.


50