我对shell的jq有疑问。所以我的JSON对象是:
{"1543446000": {"name": "John", "company": "foo"}, "1543359600": {"name": "Kate", "company": "bar"}}
数字1543446000
和1543359600
是UNIX时间戳。如何通过带有外壳变量的时间戳解析JSON对象之一?
到目前为止,我的shell脚本:
#!/bin/sh
URL="https://pastebin.com/raw/w7awz7kZ"
export DATE=$(date -d "$today 0" +%s)
JSON=$(curl -H "Accept: application/json" $API_URL)
JSON=$(echo $JSON | jq --arg date $DATE '.$date')
echo $JSON
似乎不起作用。我的意图是选择一个时间戳记描述的内部JSON对象,该时间戳记基本上是今天的午夜。所以我想选择今天的数据集。
有什么建议吗?
问候, 依诺伯格
答案 0 :(得分:3)
您需要对键访问使用完整的语法,因为美元符号不能使用较短的格式。错误消息应提供此建议。
$ jq --arg date 1543359600 '.$date' tmp.json
jq: error: syntax error, unexpected '$' (Unix shell quoting issues?) at <top-level>, line 1:
.$date
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.$date
jq: 2 compile errors
注意错误消息
'try。[“ field”]而不是.field'。
不过,您不需要引号,因为这将是您指定文字键$date
的方式。
$ jq --arg date 1543359600 '.[$date]' tmp.json
{
"name": "Kate",
"company": "bar"
}