Мені знайомий "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)
echo $(jq statement here)
?
jq
для отримання лише значення властивості рядка, це повертає його без нагляду? Якщо так, то просто перекачайте свіжеjq
.