jq: как выводить котировки на необработанный вывод в Windows

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

echo [{"a" : "b"}] | jq-win64.exe --raw-output ".[] | \"Result is: \" + .a + \".\""

генерирует

Result is: b.

но как я могу создать

Result is: "b".

К сожалению, он должен работать в Windows, вызываемой из файла CMD.


jq
person Alex    schedule 04.02.2016    source источник
comment
Что произойдет, если вы попробуете \"Result is: \"\"\" + .a + \"\"\".\"   -  person RedX    schedule 04.02.2016
comment
jq: error: синтаксическая ошибка, неожиданный QQSTRING_START, ожидается $ end (проблемы с цитированием оболочки Windows cmd?) на ‹top-level›, строка 1:. [] | Результат: + .a +. jq: 1 ошибка компиляции   -  person Alex    schedule 04.02.2016


Ответы (3)


Вам нужно избежать косой черты, чтобы избежать "

$ echo [{"a" : "b"}] | jq-win64.exe --raw-output ".[] | \"Result is: \\\"\" + .a + \"\\\".\""
Result is: "b".
person RedX    schedule 04.02.2016
comment
plus1 Спас мой день. - person Jagger; 11.04.2017

Хакерский обходной путь с меньшим количеством обратных косых черт может быть следующим:

jq -r ".[] | \"Result is: \" + (.a|tojson)"

[ПЕРЕСМОТРЕНО, чтобы отразить цель ОП.]

person Community    schedule 04.02.2016
comment
Да, верно, это определенно сработает, но ему понадобится только json-представление свойства a, а не весь объект. - person Jeff Mercado; 04.02.2016

Поскольку вы пытаетесь вывести двойные кавычки в строку с двойными кавычками, вам нужно избегать внутренних кавычек. И чтобы избежать внутренних кавычек, вам нужно также избегать экранирования обратной косой черты. Таким образом, буквальные двойные кавычки должны быть введены как \\\". Вы можете сделать это немного чище, используя интерполяцию строк вместо обычной конкатенации строк.

jq -r ".[] | \"Result is: \\\"\(.a)\\\".\""
person Jeff Mercado    schedule 04.02.2016