Мне нравится json как формат файлов конфигурации для программного обеспечения, которое я пишу. Мне нравится, что он легкий, простой и широко поддерживается. Тем не менее, я обнаружил, что есть некоторые вещи, которые мне бы очень понравились в json, которых у меня нет.Альтернативы JSON (с целью указания конфигурации)?
У Json нет многострочных строк или здесь документы (http://en.wikipedia.org/wiki/Here_document), и это часто бывает очень неудобно, если вы хотите, чтобы ваш json-файл был удобочитаемым и доступным для человека. Вы можете использовать массивы строк, но это временное решение.
Json не позволяет оставлять комментарии.
Если вы посмотрите на форматы файлов конфигурации unix, вы увидите, что многие люди разрабатывают свои собственные неудобные форматы для вещей, которые действительно имеют смысл делать с использованием какой-то вещи общего назначения. Например, вот некоторый код из конфигурационного файла Apache:
RewriteEngine on
RewriteBase /temp
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule t\.html t.xhtml [T=application/xhtml+xml]
По сути, то, что происходит здесь в том, что они изобрели чрезвычайно болезненный способ написания булевой функции п (ш, х, у, г) = w &! x & y & z. Вам нужен логический «или»? У них есть и отдельный (уродливый) механизм для этого.
Это, по-видимому, указывает на какой-то язык описания данных, который является простым и Turing-неполным, но еще более выразительным, гибким и удобным, чем json. Кто-нибудь знает такой язык?
На мой взгляд, XML слишком сложный, а выражения lisp имеют неправильные функции (Turing-completeteness) и не имеют правильных функций (здесь документы, выразительный синтаксис).
[EDIT] Название вводит в заблуждение. Меня не интересует буквально следующая итерация json. Меня не интересуют языки, которые являются подмножеством javascript. Меня интересуют альтернативные языки описания данных.
[YAML] (http://en.wikipedia.org/wiki/YAML)? – BalusC
@BalusC: Интересное предложение :-) Но YAML, похоже, не предлагает какой-либо хороший способ выполнения логической функции/примера Apache или приложений аналогичного вкуса. –