Можно ли использовать комментарии в формате JSON? - PullRequest
6607 голосов
/ 28 октября 2008

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

Ответы [ 47 ]

56 голосов
/ 26 октября 2011

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

46 голосов
/ 22 июня 2017

Вот что я нашел в документации 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"
}
38 голосов
/ 10 апреля 2010

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

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

34 голосов
/ 25 июля 2014

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

// "имя": "строка"

// "id": int

или

/ * Это

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

PS: Однострочные комментарии поддерживаются только в 6+ версиях Newtonsoft Json.

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

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

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

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

30 голосов
/ 29 октября 2008

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

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

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

Для получения более подробной информации посетите сайт JSON .

29 голосов
/ 22 июня 2011

Я только что столкнулся с этим для файлов конфигурации. Я не хочу использовать XML (подробный, графически, некрасивый, трудно читаемый) или формат ini (без иерархии, без реального стандарта и т. Д.) Или формат Java «Свойства» (например, .ini).

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

Полагаю, можно использовать "#": "comment" для "правильного" JSON.

28 голосов
/ 25 июня 2013

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

JSON не имеет комментариев. Кодер JSON НЕ ДОЛЖЕН выводить комментарии. Декодер JSON МОЖЕТ принимать и игнорировать комментарии.

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

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

28 голосов
/ 04 августа 2012

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

См. другой вопрос переполнения стека .

25 голосов
/ 11 декабря 2012

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

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

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

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

Относительно замечания 1014 *, сделанного Дугласом Крокфордом по этому вопросу (на которое ссылается @Artur Czajka)

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

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

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

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

22 голосов
/ 24 ноября 2015

Если вы используете JSON5 , вы можете добавить комментарии.


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...