我有一个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在不通过临时文件的情况下输出相同的结果?
答案 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解释了这里发生的事情: