Можно ли использовать комментарии в JSON?

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

Комментарии к вопросу (16)
Решение

Нет.

Весь 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"
            }
         }
      }
   }
}
Комментарии (26)

Нет, комментарии вида //... или /*...*/ не допускаются в JSON. Этот ответ основан на:

  • http://www.json.org
  • RFC 4627: Медиатип application/json для JavaScript Object Notation (JSON)
  • RFC 8259 Формат обмена данными JavaScript Object Notation (JSON) (заменяет RFC 4627, 7158, 7159)
Комментарии (13)

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

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

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

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

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

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

Комментарии (23)

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

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

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

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

Комментарии (22)

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

Как было отмечено, этот хак имеет преимущество выполнения спецификаций. Не все в 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. Если вы разбираете его, вы'll получить объект такой:

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

Что означает, нет и в помине комментариях, и они выиграли'т иметь странные побочные эффекты.

Всего доброго!

Комментарии (41)

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

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

См. hjson.org для JavaScript, Java, и Python, и на PHP, ржавчина, Давай, Руби и C# - библиотеках.

Комментарии (7)

Рассмотрите возможность использования в YAML. Это'ы почти надмножество JSON, в (практически все допустимые JSON является допустимым и YAML) и позволяет комментарии.

Комментарии (20)

Нельзя. По крайней мере, таков мой опыт, полученный при беглом взгляде на json.org.

Синтаксис JSON визуализирован на этой странице. Там нет никаких замечаний по поводу комментариев.

Комментарии (0)

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

Пример:

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

Вы можете предоставить документацию с помощью описание атрибутов схемы.

Комментарии (6)

Если вы используете Джексон в качестве вашего парсера JSON, то это, как вы включите его, чтобы разрешить комментарии:

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

Затем вы можете иметь такой комментарий:

{
  key: "value" // Comment
}

И вы также можете получить комментарии начинаются с#, установив:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

Но в целом (как ответили раньше) в спецификацию не дает комментарии.

Комментарии (0)

Комментарии не являются официальным стандартом. Хотя некоторые анализаторы поддерживает комментарии в стиле 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 ТОМЛ.

Еще одной альтернативой является jsonc.

Комментарии (1)

Вот что я нашел в документации Google опорного пункта, что позволяет поставить комментарии в 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"
}
Комментарии (5)

Если ваш текстовый файл, который является JSON-строку, будет прочитана какая-то программа, насколько трудно будет вырезать либо C или C комментариями в стиле C++, прежде чем использовать его?

Ответ: это будет один лайнер. Если вы сделаете это, то JSON-файлы могут использоваться как файлы конфигурации.

Комментарии (6)

Если вы используете Newtonsoft.Библиотека JSON с ASP.NET читать/десериализации вы можете использовать комментарии в JSON-контента:

и gt; //"имя" и: "в строке"и

//ошибка"ИД" и: Инт

или

/* это

пример комментария */

ЗЫ: однострочные комментарии поддерживаются только с 6+ версии Newtonsoft json-файле.

Дополнительное примечание для людей, которые могут'т думаю, что из коробки: я использовать формат JSON для основных настроек в веб-приложении ASP.NET я сделал. Я читаю файл, преобразовать его в объект параметров библиотеку Newtonsoft и использовать его при необходимости.

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

Я думаю, что это 'проще в использовании/понимать' способом, чем создание отдельного 'настройки.Файл README' файл и объясняя параметры в нем.

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

Комментарии (4)

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

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

При этом не предполагается, что JSON-файл должен содержать комментарии в традиционном смысле. Это должны быть просто данные.

Более подробную информацию можно найти на сайте JSON.

Комментарии (5)

Я только что столкнулись с этой для файлов конфигурации. Я не'т хотите использовать XML и (вербальном, графическом, некрасиво, тяжело читать), или "Ини" в формате (никакой иерархии, никакого реального стандарта и т. д.). или Java "и" в формате (как свойства .Ини).

JSON может делать все, что они могут сделать, но это гораздо менее многословный и более удобочитаемое и Парсеры легко и повсеместно на многих языках. Это's просто в дереве данных. Но внеполосного комментарии являются необходимостью часто к документу "по умолчанию" по конфигурации и тому подобное. Конфигурации никогда не должны быть "Документы", но деревья сохраненных данных, которые могут быть читабельным при необходимости.

Я думаю, что можно использовать в "#" и: "в комментарии" В, и"действует" в формате JSON.

Комментарии (5)

JSON не поддерживает комментарии изначально, но вы можете сделать свой собственный декодер или, по крайней мере препроцессор для прокладки вне замечания, что'ы прекрасно (как долго, как вы просто игнорируете замечания и Дон'т использовать их, чтобы направлять, как ваше приложение должно обрабатывать данные JSON).

JSON не имеют замечаний. JSON, что регулятор не должен выдавать замечания. С помощью JSON декодер может принимать и игнорировать замечания.

комментарии не должны быть использованы для того чтобы передать что-нибудь значимое. Это что JSON-это для.

Сравни: Дуглас Крокфорд, автор в JSON спецификации.

Комментарии (1)

Это зависит от вашего JSON-библиотекой. Json.NET поддерживает JavaScript комментарии в стиле, /* commment */.

См. другой стек&ампер;усилитель; nbsp;переливом вопрос.

Комментарии (1)

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

Если у людей есть веские причины против того, чтобы комментарии в JSON для передачи данных (будь то действующий или нет), то, возможно, JSON можно разделить на два:

  • В JSON-ком: JSON на провода, или правила, которые применяются при общении данных JSON.
  • В JSON-документа: документ JSON, или JSON в файлах или локально. Правила, определяющие допустимый JSON-документ.

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

Касаемо замечание, сделанные Дугласа Крокфорда на эти вопросы (на которые ссылается @Артур Чайки)

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

Мы're говоря о типовой файл конфигурации выпуска (кросс язык/платформа), и он'ы отвечать с помощью JS конкретную программу!

Уверен, что конкретный формат JSON код может быть реализован на любом языке, но стандартизация это так, это будет повсеместно по парсеров на всех языках и платформах, так что люди перестанут тратить свое время не хватало этой функции, потому что у них есть хорошее применение-аргументы за это, глядя в вопрос на интернет-форумах, и люди им говорю, что'ы плохая идея или предполагая, что он's легкий для того чтобы реализовать удаление комментариев из текстовых файлов.

Другой вопрос совместимости. Предположим, у вас есть библиотека или API или какой-либо подсистемы, которая имеет некоторые конфигурации или файлы данных, связанные с ним. И эта подсистема является чтобы быть доступны из разных языков. Тогда вы идете, чтобы сказать людям: кстати Дон'т забудьте убрать комментарии из JSON файлов перед передачей их в парсер!

Комментарии (1)

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

От создателя формата JSON:

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

Официальный сайт JSON-это по JSON.org. JSON-это определяется как стандартный ЕАПБ Международного. Всегда есть процесс ходатайство пересмотрели стандарты. Маловероятно, что аннотации будут добавлены в стандарт JSON для нескольким причинам.

JSON по конструкции является легко реверс-инженерии (человеческие разобранный) альтернатива XML. Это упрощенная до такой степени, что аннотации не нужны. Это даже не язык разметки. Цель-это стабильность и interoperablilty.

Всем, кто понимает "есть-А" отношения ориентация объекта может понять любой JSON-структуры - в этом вся суть. Это просто направленный ациклический граф (DAG) с узлом теги (пар ключ/значение), который является почти универсальной структуры данных.

Это требуется только, аннотация может быть "//эти метки-Даг и". Имена ключей могут быть как информативным, так как требуется, что позволяет произвольные семантические арности.

Любая платформа может парсить JSON с помощью всего нескольких строк кода. XML требует сложных библиотек ОО, которые не являются жизнеспособными на многих платформах.

Аннотации просто сделать JSON и сделать менее совместимы. Тут просто нечего добавить, если только то, что вам действительно нужно, это язык разметки (XML), и Дон'т волнует, если ваши сохраненные данные легко разбирается.

Комментарии (0)