JQ无法用嵌入式JSON在Windows的Git Bash上解析JSON



我有一个bash脚本(在windows上运行的git bash),该脚本使用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输出相同的结果而无需通过临时文件?

jq为解析嵌入式JSON提供了fromjson功能。例如,

$ 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

我已经对JQ提交了一个错误,但是将其关闭,因为它在Ubuntu或MacOS上不可重现。尼科·威廉姆斯(Nico Williams)解释了这里发生了什么:

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

最新更新