Я знаком с "JQ" для разбора JSON.
Я работаю с одним сервисом, который выдает ответ json, где одно из свойств само является строкой json. Как мне преобразовать это значение в кавычках в допустимую строку json, чтобы потом обработать ее с помощью jq?
Например, если я просто смотрю обычный печатный json из «jq.», Вот краткий отрывок из вывода:
"someJsonString": "{\"date\":\"2018-01-08\", ...
Я могу использовать jq, чтобы получить значение этого свойства, но мне нужно преобразовать строку в кавычках в действительный json, "убрав его".
Я полагаю, я мог бы передать это в sed, удалив открывающие и заканчивающиеся двойные кавычки и удалив все обратные слеши (" sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
"). Кажется, это работает, но это не самое надежное решение.
Обновление :
Просто чтобы быть немного более понятным в том, что я делаю, вот пара элидированных образцов, которые показывают, что я пробовал:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
Обновление :
Вот совершенно автономный пример:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
Обновление :
Если я попытался обработать этот последний вывод с помощью реального выражения jq, он сделал что-то вроде этого:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
jq
чтобы получить только значение свойства строки, он возвращает его незаменяемым? Если это так, просто превратите это в свежийjq
.echo $(jq statement here)
?Ответы:
Для этого есть
raw
флагВыход
источник
jq
для дальнейшей обработки JSON, тогда как при подходе Романа вы можете продолжить то жеjq
выражение.jq -rc '.stuff.date'
производитjq: error (at <stdin>:0): Cannot index string with string "date"
. Однако:.stuff | fromjson | .date
работает отлично.С
jq
«Sfromjson
функции:Пример
stuff.json
содержимого:Выход:
источник