Blog. Just Blog

Как добавить комментарии в JSON

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Как добавить комментарии в JSON
Как добавить комментарии в JSON

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

Но, как оказалось, формат JSON не поддерживает комментарии (Douglas Crockford - создатель JSON, если что), а PHP, придерживаясь стандарта, при попытке декодировать файл с комментариями возвращает пустые данные. Вот для наглядности два простейших примера, как это (не) работает:
  1. $a='{
  2.     "one":1/* first number */
  3.     "two":2  /* second number */
  4. }';
  5. print_r(json_decode($a));
  6.  
  7. // Пусто :(
  1. $a='{
  2.     "one":1// first number
  3.     "two":2  // second number
  4. }';
  5. print_r(json_decode($a));
  6.  
  7. // Пусто :(
Где-нибудь в описании объектов на JavaScript подобные комментарии воспринимались бы нормально, но только не в файле JSON. В обоих случаях возвращается пустота.

На ум приходили даже некрасивые варианты решения проблемы в виде добавления новых полей-комментариев, но очень не хотелось засорять избыточными данными и без того неудобочитаемую конфигурацию. После копания разных зарубежных интернетов, я наткнулся вот на эту статью (оригинальный сайт сдох, ссылка на веб-архив), где моя проблема решалась просто и элегантно. Суть решения сводится к тому, что если при разборе JSON встретятся несколько значений с одинаковыми ключами, то в формируемом объекте используется то значение, которое оказалось последним. Готовый файл JSON стал выглядеть примерно так:
  1. $a='{
  2.     "one":"first number",
  3.     "one":1,
  4.  
  5.     "two":"second number",
  6.     "two":2
  7. }';
  8. print_r(json_decode($a));
  9.  
  10. // stdClass Object
  11. // (
  12. //     [one] => 1
  13. //     [two] => 2
  14. // )
Никаких дополнительных полей, никакого мусора в получаемом объекте, файл полностью соответствует спецификации JSON и проходит валидацию, но при этом все элементы снабжены комментариями. "Вот такая загогулина, понимаешь."

Поделиться ссылкой ВКонтакте
Просмотров: 17457 | Комментариев: 6

Метки: JavaScript
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
WebMaster (07.09.2018 в 21:26):
PHP код продублирован.
Спасибо за статью!
P.S. Уберите кнопку "Отменить" при добавлении отзыва. Зачем она? ) Я в попыхах на нее кликнул)
ManHunter (22.11.2015 в 19:37):
Ссылка на первоисточник указана.
Alex (22.11.2015 в 19:15):
Это один из ответов отсюда http://stackoverflow.com/quest...493#18018493
Vladimir (12.10.2015 в 17:05):
Такая https://web.archive.org/web/20...omments.html ссылка красивше выглядит, с оформлением.
ManHunter (11.10.2015 в 16:52):
Странно, что так быстро сдохло. Еще можно прочитать в кэше: http://hghltd.yandex.net/yandb...5d56&keyno=0
Vladimir (11.10.2015 в 16:47):
Только ссылка на статью http://fadefade.com/json-comments.html почему-то не открывается.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0035 сек.) / Память: 4.5 Mb
Наверх