Каковы различия между YAML и JSON, особенно учитывая следующие вещи?
- Производительность (время кодирования / декодирования)
- Потребление памяти
- Ясность выражения
- Доступность библиотеки, простота использования (я предпочитаю C)
Я планировал использовать один из этих двух компонентов в нашей встроенной системе для хранения файлов конфигурации.
Связанные с:
Должен ли я использовать YAML или JSON для хранения данных Perl?
Ответы:
Технически YAML - это расширенный набор JSON. Это означает, что, по крайней мере, теоретически, синтаксический анализатор YAML может понимать JSON, но не обязательно наоборот.
См. Официальные спецификации в разделе «YAML: отношение к JSON» .
В целом, есть некоторые вещи, которые мне нравятся в YAML, которых нет в JSON.
На практике ни один из этих двух последних пунктов, скорее всего, не будет иметь значения для вещей, которые вы или я делаем, но в долгосрочной перспективе, я думаю, YAML будет более надежным и жизнеспособным форматом сериализации данных.
Прямо сейчас AJAX и другие веб-технологии обычно используют JSON. YAML в настоящее время больше используется для обработки данных в автономном режиме. Например, он включен по умолчанию в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.
Вы найдете библиотеки C для JSON и YAML. Библиотеки YAML имеют тенденцию быть более новыми, но у меня не было проблем с ними в прошлом. Смотрите, например, Yaml-CPP .
источник
Отличия:
{a: &b [*b]}
, которые в некоторых конвертерах будут выполняться бесконечно. Даже при круговом обнаружении «бомба ямла» все еще возможна (см. Бомбу XML ).Замечания:
источник
В обход эзотерической теории
Это отвечает названию, а не деталям, так как большинство просто читает заголовок из результатов поиска на Google, как я, поэтому я чувствовал, что это необходимо объяснить с точки зрения веб-разработчика .
Слон в комнате: сам интернет
JavaScript так явно доминирует в сети с огромным преимуществом, и разработчики JavaScript предпочитают использовать JSON в качестве формата данных в подавляющем большинстве наряду с популярными веб-API, поэтому становится трудно спорить об использовании YAML над JSON при выполнении веб-программирования в общем смысле, так как вы, вероятно, будете отстранены в командной среде. На самом деле, большинство веб-программистов даже не знают о существовании YAML, не говоря уже о том, чтобы использовать его.
Если вы занимаетесь веб-программированием, JSON - это путь по умолчанию, так как при работе с JavaScript не требуется никакого шага перевода, поэтому вы должны придумать лучший аргумент, чтобы использовать YAML над JSON в этом случае.
источник
Этому вопросу 6 лет, но, как ни странно, ни один из ответов на самом деле не затрагивает все четыре пункта (скорость, память, выразительность, портативность).
скорость
Очевидно, что это зависит от реализации, но поскольку JSON настолько широко используется и настолько прост в реализации, он, как правило, получает большую собственную поддержку и, следовательно, скорость. Учитывая, что YAML делает все, что делает JSON, плюс больше грузовиков, вполне вероятно, что из любых сопоставимых реализаций обоих JSON будет быстрее.
Однако, учитывая , что файл YAML может быть немного меньше , чем его аналог JSON (за счет меньшего количества
"
и,
символы), это возможно , что оптимизированная YAML парсер может быть быстрее , в исключительных обстоятельствах.Память
В основном применяется тот же аргумент. Трудно понять, почему синтаксический анализатор YAML мог бы быть более эффективным с точки зрения памяти, чем анализатор JSON, если они представляют одну и ту же структуру данных.
Выразительность
Как отмечали другие, программисты на Python предпочитают программировать на YAML, JavaScript, а не JSON. Я сделаю эти наблюдения:
портативность
Трудно представить современный язык без библиотеки JSON. Также сложно представить JSON-парсер, реализующий что-то меньшее, чем полная спецификация. YAML имеет широкую поддержку, но менее распространен, чем JSON, и каждый анализатор реализует свое подмножество. Следовательно, файлы YAML менее совместимы, чем вы думаете.
Резюме
JSON - победитель за производительность (если уместно) и совместимость. YAML лучше для файлов, поддерживаемых человеком. HJSON - достойный компромисс, хотя и с гораздо меньшей переносимостью. JSON5 - более разумный компромисс с четко определенным синтаксисом.
источник
GIT и YAML
Другие ответы хороши. Прочитайте те сначала. Но я добавлю еще одну причину использовать YAML: git .
Все больше и больше программных проектов используют репозитории git для распространения и архивирования. И хотя история репозитория git может в равной степени хранить файлы JSON и YAML, метод diff, используемый для отслеживания и отображения изменений в файле, ориентирован на строки. Поскольку YAML вынужден ориентироваться на строки, любые небольшие изменения в файле YAML легче увидеть человеку.
Конечно, это правда, что файлы JSON можно «сделать красивыми», отсортировав строки / ключи и добавив отступы. Но это не по умолчанию, и я ленивый.
Лично я обычно использую JSON для взаимодействия системы. Я часто использую YAML для файлов конфигурации, статических файлов и отслеживаемых файлов. (Я также обычно избегаю добавления реляционных якорей YAML. Жизнь слишком коротка, чтобы выслеживать циклы.)
Кроме того, если скорость и пространство действительно важны, я тоже не использую. Вы можете посмотреть на BSON.
источник
Я считаю, что YAML проще для глаз: меньше скобок, "" и т. Д. Хотя в YAML есть раздражение от вкладок ... но это можно понять.
С точки зрения производительности / ресурсов, я не ожидал бы больших различий между ними.
Кроме того, мы говорим о файлах конфигурации, и поэтому я не ожидаю высокой частоты кодирования / декодирования, не так ли?
источник
Если вам не нужны какие-либо функции, которые есть у YAML, а у JSON нет, я бы предпочел JSON, потому что он очень прост и широко поддерживается (имеет много библиотек на многих языках). YAML более сложный и имеет меньшую поддержку. Я не думаю, что скорость синтаксического анализа или использование памяти будут сильно отличаться, и, возможно, не будет большой частью производительности вашей программы.
источник
Технически YAML предлагает гораздо больше, чем JSON (YAML v1.2 - это расширенный набор JSON):
якоря и наследование - пример 3 одинаковых предметов:
В большинстве случаев люди не будут использовать эти дополнительные функции, и главное отличие состоит в том, что YAML использует отступы, а JSON использует скобки . Это делает YAML более лаконичным и читаемым (для тренированных глаз).
Какой выбрать?
источник
Поскольку этот вопрос теперь занимает заметное место при поиске YAML и JSON, стоит отметить одно редко цитируемое различие между ними: лицензия. JSON претендует на то, чтобы иметь лицензию, которой должны придерживаться пользователи JSON (включая юридически неоднозначное «должно использоваться для Добра, а не Зла»). YAML не имеет такой лицензии, и это может быть важным отличием (для вашего адвоката, если не для вас).
источник
{ "": #, [] }
???Иногда вам не нужно выбирать одно за другим.
В Go, например, вы можете иметь оба одновременно:
источник
От: Arnaud Lauret Book «Дизайн веб-API». :
Формат данных JSON
JSON - это текстовый формат данных, основанный на том, как язык программирования JavaScript описывает данные, но, несмотря на свое название, полностью не зависит от языка (см. Https://www.json.org/ ). Используя JSON , вы можете описывать объекты, содержащие неупорядоченные пары имя / значение, а также массивы или списки, содержащие упорядоченные значения, как показано на этом рисунке.
Объект ограничен фигурными скобками ({}). Имя является строкой в кавычках («имя») и отделяется от значения двоеточием (:). Значением может быть строка типа «значение», число типа 1.23, логическое значение (истина или ложь), нулевое значение нуль, объект или массив. Массив ограничивается скобками ([]), а его значения разделяются запятыми (,). Формат JSON легко разбирается с использованием любого языка программирования. Это также относительно легко читать и писать. Он широко применяется для многих целей, таких как базы данных, файлы конфигурации и, конечно, API.
YAML
YAML (YAML - это не язык разметки) - это удобный для пользователя формат сериализации данных. Как и JSON, YAML ( http://yaml.org ) является форматом данных ключ / значение. На рисунке показано сравнение двух.
Обратите внимание на следующие моменты:
В именах и значениях свойств в YAML нет двойных кавычек ("") .
Структурные фигурные скобки JSON ({}) и запятые (,) заменяются на новые строки и отступы в YAML .
Скобки ([]) и запятые (,) заменяются черточками (-) и символами новой строки в YAML .
В отличие от JSON , YAML допускает комментарии, начинающиеся с хеш-метки (#). Относительно легко преобразовать один из этих форматов в другой. Будьте предупреждены, однако, вы потеряете комментарии при преобразовании документа YAML в JSON .
источник
Я считаю, что YAML и JSON очень эффективны. Единственные две вещи, которые действительно диктуют, когда одна используется поверх другой для меня, это одна, с которой язык используется наиболее популярно. Например, если я использую Java, Javascript, я буду использовать JSON. Что касается Java, я буду использовать их собственные объекты, которые в значительной степени являются JSON, но в них отсутствуют некоторые функции, и преобразовать их в JSON, если мне нужно, или сначала сделать это в JSON. Я делаю это, потому что это обычное явление в Java и позволяет другим разработчикам Java модифицировать мой код. Во-вторых, использую ли я это для программы, чтобы запомнить атрибуты, или если программа получает инструкции в виде файла конфигурации, в этом случае я буду использовать YAML, потому что он очень легко читается человеком, имеет хороший выглядит синтаксис, и его очень легко изменить, даже если вы не знаете, как работает YAML. Затем программа прочитает его и преобразует в JSON или любой другой формат, предпочтительный для этого языка.
В конце концов, это, честно говоря, не имеет значения. И JSON, и YAML легко читаются любым опытным программистом.
источник
JSON не может обрабатывать большие данные, сравнивая yml
Не подходит для обработки различных мультимедийных форматов.
JSON не имеет функции поддержки «комментариев». Это может быть включено как дополнительный атрибут в одиночку.
YAML имеет некоторые преимущества перед JSON, такие как самостоятельная ссылка, поддержка сложных типов данных, встроенные литералы блоков, комментарии и многое другое.
источник