В чем разница между YAML и JSON? Когда предпочесть одно другому

Я использую синтаксис «heredoc», о котором упоминает Дэвид Янг. Но есть улов:

#!/usr/bin/sh

mongo <db> <<EOF
db.<collection>.find({
  fieldName: { $exists: true }
})
.forEach( printjson );
EOF

Вышеуказанное НЕ будет работать, потому что фраза «$ существует» будет видна оболочкой и заменена значением переменной среды с именем «существует». Который, вероятно, не существует, поэтому после расширения оболочки он становится:

#!/usr/bin/sh

mongo <db> <<EOF
db.<collection>.find({
  fieldName: { : true }
})
.forEach( printjson );
EOF

. Чтобы пройти через него, у вас есть два варианта. Один уродлив, один довольно приятный. Во-первых, уродливый: избегайте знака $:

#!/usr/bin/sh

mongo <db> <<EOF
db.<collection>.find({
  fieldName: { \$exists: true }
})
.forEach( printjson );
EOF

Я НЕ рекомендую это, потому что легко забыть сбежать.

Другой вариант - избежать EOF, вот так:

#!/usr/bin/sh

mongo <db> <<\EOF
db.<collection>.find({
  fieldName: { $exists: true }
})
.forEach( printjson );
EOF

Теперь вы можете поместить все ваши долларовые знаки в свой heredoc, а знаки доллара игнорируются. Нижняя сторона: это не работает, если вам нужно поместить параметры / переменные оболочки в свой скрипт монго.

Еще один вариант, с которым вы можете играть, - это возиться со своим shebang. Например,

#!/bin/env mongo
<some mongo stuff>

Существует несколько проблем с этим решением:

  1. Он работает только в том случае, если вы пытаетесь выполнить исполняемый файл сценария оболочки mongo из командной строки. Вы не можете смешивать обычные команды оболочки с командами оболочки mongo. И все, что вы сохраняете, не нужно вводить «mongo» в командной строке ... (конечно, конечно)
  2. Он функционирует точно так же, как «mongo & lt; some-js-file & gt; " что означает, что он не позволяет вам использовать «use & lt; db & gt;»; команда.

Я попытался добавить имя базы данных в shebang, что, по вашему мнению, будет работать. К сожалению, система обрабатывает строку shebang, все после первого пробела передается в качестве единственного параметра (как если бы он цитируется) команде env, а env не находит и не запускает его.

Вместо этого вам нужно встроить изменение базы данных внутри самого скрипта, например:

#!/bin/env mongo
db = db.getSiblingDB('<db>');
<your script>

Как и в любом случае в жизни, «существует несколько способов сделать это ! "

619
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

Технически YAML является расширенным набором JSON. Это означает, что, по крайней мере теоретически, синтаксический анализатор YAML может понимать JSON, но не обязательно наоборот.

См. Официальные спецификации в разделе, озаглавленном «YAML: отношение к JSON» .

В целом, есть некоторые вещи, которые мне нравятся в YAML, которые недоступны в JSON.

  • Как указал @jdupont , YAML визуально легче смотреть. Фактически, домашняя страница YAML сама по себе является действительным YAML, но ее легко читать человеку.
  • YAML имеет возможность ссылаться на другие элементы в файле YAML с помощью «привязок». Таким образом, он может обрабатывать реляционную информацию, как можно найти в базе данных MySQL.
  • YAML более надежен при встраивании других форматов сериализации, таких как JSON или XML , в файл YAML.

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

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

Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .

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

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

Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .

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

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

Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .

Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.

Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .

Например, он по умолчанию включен в пакет компьютерного зрения OpenCV на основе C, а JSON - нет.

Вы найдете библиотеки C как для JSON, так и для YAML. Библиотеки YAML, как правило, новее, но раньше у меня не было с ними проблем. См., Например, Yaml-cpp .

615
ответ дан 22 November 2019 в 21:44
поделиться

От: Arnaud Lauret Book Дизайн “The веб-API. ”:

формат данных JSON

JSON является текстовым форматом данных на основе того, как язык программирования JavaScript описывает данные, но, несмотря на его имя, абсолютно независимое от языка (см. https://www.json.org / ). Используя [1 125] JSON, Вы можете описать объекты, содержащие незаказанный пары имя/значение, и также выстраиваете или списки, содержащие заказанный значения, как показано в этом числе.

enter image description here

объект разграничен фигурными скобками ({}). Имя является заключенной в кавычки строкой ("имя") и является сентябрем - arated от его значения двоеточием (:). Значение может быть строкой как "значение", числом как 1,23, булевская переменная (TRUE или FALSE), пустой указатель нулевого значения, объект или массив. Массив разграничен скобками ([]), и его значения разделяются запятыми (). формат JSON легко анализируется с помощью любого языка программирования. Также относительно легко читать и записать. Это широко принято для многого использования, такого как базы данных, configura-tion файлы, и, конечно, API.

YAML

YAML (Язык разметки YAML Ain’t) является человечески-благоприятным, форматом сериализации данных. Как JSON, YAML ( http://yaml.org ) является форматом данных ключа/значения. Данные показывают сравнение двух.

enter image description here

Примечание следующие моменты:

  • нет никаких двойных кавычек (" ") вокруг имен свойства и значений в [1 129] YAML.

  • JSON’s структурные фигурные скобки ({}) и запятые () заменяются новыми строками и добавлением отступа в [1 131] YAML.

  • скобки Массива ([]) и запятые () заменяются тире (-) и новые строки в [1 132] YAML.

  • , В отличие от этого JSON, YAML позволяет комментарии, начинающиеся со знака "диез" (#). Относительно легко преобразовать один из тех форматов в другой. Будьте предупреждены, хотя, Вы потеряете комментарии при преобразовании документ YAML [1 136] JSON.

0
ответ дан 22 November 2019 в 21:44
поделиться

Я считаю, что YAML будет проще для глаз: меньше скобок, "" и т. д. Хотя вкладки в YAML раздражают ... но с ними можно повесить.

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

Более того, мы говорим о файлах конфигурации, и поэтому я бы не стал

22
ответ дан 22 November 2019 в 21:44
поделиться

If you don't need any features which YAML has and JSON doesn't, I would prefer JSON because it is very simple and is widely supported (has a lot of libraries in many languages). YAML is more complex and has less support. I don't think the parsing speed or memory use will be very much different, and maybe not a big part of your program's performance.

19
ответ дан 22 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: