JQ无法在GIT BASH for WINDOWS上使用嵌入式JSON解析JSON

JQ无法在GIT BASH for WINDOWS上使用嵌入式JSON解析JSON,json,jq,Json,Jq,我有一个bash脚本(在git bash for windows上运行),它使用curl从服务器获取json响应。响应包含一个包含json数据的字段。响应如下所示: [{ "Status": "A", "JSON": "{\"field1\":\"value1\"}" }, { "Status": "B", "JSON": "{\"field1\":\"value2\"}" }] 下面是我试图解析此字符串的bash脚本: #!/bin/bash echo "pa

我有一个bash脚本(在git bash for 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在不经过临时文件的情况下输出相同的结果?

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

我已经向jq提交了一个关于这个的bug,但是关闭了它,因为它在ubuntu或macos上不可复制。Nico Williams解释了这里发生的事情:


您看到的输出是由于
tee
的输出,与
jq
无关。您的脚本从不涉及嵌入的JSON
echo“$result”>json\u in_json.json
就足够了。TarekZ-您使用的是什么版本的bash?在哪个站台?我在MacOS上使用bash 3或bash 4时没有问题。我正在git bash for windows上进行测试。Bash版本4.4.12I在解析文件中的json时没有问题。但是我尝试不使用tmperory文件,而是使用存储在变量中的结果。此外,我不关心JSON部分,我关心的是状态字段。JSON字段只是与jq select链接;这个问题与
jq
无关,但事实是
tee
在显示
jq'
结果之前将完整的JSON转储到标准输出。而且,在这种情况下,您的问题标题完全是误导性的。我将tee放在那里是为了表明它是存储在变量result和文件中的相同JSON。如果将字符串的内容复制到文件中,则可以删除T形三通。它将产生同样的结果。正如我在文章末尾所说的,我想得到使用文件时得到的[“A”,“B”]结果,而不是解析变量时得到的]B。我明白你对tee的意思了。我改变了脚本,但结果还是一样。很抱歉给你带来了困惑。