JQ无法在WINDOWS的GIT BASH上解析带有嵌入式JSON的JSON

时间:2019-03-06 18:08:53

标签: json jq

我有一个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在不通过临时文件的情况下输出相同的结果?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我已经向jq提交了一个与此有关的错误,但是由于它在ubuntu或macOS上无法复制,因此将其关闭。 Nico Williams解释了这里发生的事情:

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