JQ не может проанализировать JSON со встроенным JSON в GIT BASH для WINDOWS - PullRequest
0 голосов
/ 06 марта 2019

У меня есть скрипт bash (работающий на git bash для Windows), который использует curl для получения ответа json от сервера. Ответ содержит поле, содержащее данные JSON. Ответ выглядит так:

[{
    "Status": "A",
    "JSON": "{\"field1\":\"value1\"}"
}, {
    "Status": "B",
    "JSON": "{\"field1\":\"value2\"}"
}]

вот скрипт bash, с которым я пытаюсь разобрать эту строку:

#!/bin/bash
echo "parsing result in variable"
result='[{"Status":"A", "JSON":"{\"field1\":\"value1\"}"},{"Status":"B", "JSON":"{\"field1\":\"value2\"}"}]'
echo $result > json_in_json.json
result=$(echo "$result" | jq '[.[]."Status"]')
echo $result

echo "parsing result from file"
 jq '[.[]."Status"]' json_in_json.json

и вот что я вижу в терминале

parsing result in variable
[{"Status":"A", "JSON":"{\"field1\":\"value1\"}"},{"Status":"B", "JSON":"{\"field1\":\"value2\"}"}]
 ]B",
parsing result from file
[
  "A",
  "B"
]

Есть ли способ заставить jq выводить тот же результат без прохождения временного файла?

Ответы [ 2 ]

1 голос
/ 06 марта 2019

jq предоставляет функцию fromjson для анализа встроенного JSON. Например,

$ jq '.[].JSON | fromjson | .field1' tmp.json
"value1"
"value2"

Обновление:

Проблема не в jq, а в том, что tee записывает свой ввод в стандартный вывод, а также в любые файлы, названные в качестве аргументов. Перенаправить на /dev/null

echo "$result" | tee json_in_json.json > /dev/null

или вообще не используйте tee.

echo "$result" > json_in_json.json
0 голосов
/ 21 марта 2019

Я сообщил об этом в jq об ошибке, но закрыл ее, так как она не воспроизводилась в Ubuntu или Macos.Нико Уильямс объяснил, что здесь происходит:

https://github.com/stedolan/jq/issues/1855

...