У вас есть три основных варианта:
(Легко) Поместите программу JSON и jq в отдельные файлы (или, может быть, осторожно, в один файл) и, соответственно, вызовите jq.
(подвержен ошибкам) Следуйте правилам цитирования используемой вами оболочки.
Некоторая комбинация вышеперечисленного.
Основное правило, как я понимаю, заключается в следующем: в командной строке Windows cmd
для кавычек строк вы используете двойные кавычки и экранируете двойные кавычки в пределахстрока с использованием обратной косой черты.
Например:
C>ver
Microsoft Windows [Version 10.0.17134.590]
C>echo "hello \"world\"" | jq .
"hello \"world\""
C>jq -n "\"hello world\""
"hello world"
Ваш пример
C>echo ["a","b","c"] | jq -c "{\"data\":map({\"{#SNAME}\":.})}"
{"data":[{"{#SNAME}":"a"},{"{#SNAME}":"b"},{"{#SNAME}":"c"}]}
Postscript
За исключением хеша (#
) и фигурных скобок (* 1029)*) в строке можно достичь цели, избегая пробелов:
C>echo ["a","b","c"] | jq -c {"data":map({"SNAME":.})}
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
Powershell
Опять же, кроме хеша и фигурных скобок, возможны простые решения:
Использование строк в одинарных кавычках:
echo '["a", "b", "c"]' | jq -c '{"data": map( {"SNAME": . })}'
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
Использование ""
в строках в двойных кавычках:
echo '["a", "b", "c"]' | jq -c "{""data"": map( {""SNAME"": . })}"
{"data":[{"SNAME":"a"},{"SNAME":"b"},{"SNAME":"c"}]}
В документации PowerShell, которую я видел, предлагается использовать обратные метки для экранированияспециальные символы в строках с двойными кавычками, но YMMV.
Боннский шанс!