如何使用shell jq动态解析JSON对象

时间:2018-11-29 21:37:48

标签: json linux bash shell jq

我对shell的jq有疑问。所以我的JSON对象是:

{"1543446000": {"name": "John", "company": "foo"}, "1543359600": {"name": "Kate", "company": "bar"}}

数字15434460001543359600是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对象,该时间戳记基本上是今天的午夜。所以我想选择今天的数据集。

有什么建议吗?

问候, 依诺伯格

1 个答案:

答案 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"
}