如何使用jq从JSON转储中提取最新的色调场景?
我试图使用jq在传递场景名称时查找色调场景的ID。问题是,如果我更新场景,它会使用指定给它的新ID生成另一个场景。因此,当我对场景进行更改时,会返回多个结果。如何找到最新的场景?我看到有一个对象是最近更新的 以下是我到目前为止的情况:如何使用jq从JSON转储中提取最新的色调场景?,json,jq,chronological,Json,Jq,Chronological,我试图使用jq在传递场景名称时查找色调场景的ID。问题是,如果我更新场景,它会使用指定给它的新ID生成另一个场景。因此,当我对场景进行更改时,会返回多个结果。如何找到最新的场景?我看到有一个对象是最近更新的 以下是我到目前为止的情况: curl -s ${BASEURL}/scenes/ | /usr/local/bin/jq -r -e --arg SCENENAME "${SCENENAME}" '. as $object | keys[] | select($object[.].name
curl -s ${BASEURL}/scenes/ | /usr/local/bin/jq -r -e --arg SCENENAME "${SCENENAME}" '. as $object | keys[] | select($object[.].name == $SCENENAME)'
以下是json输出的样子:
"FUX9A2m4LcuF6YG": {
"name": "KitchenDay",
"lights": [
"6",
"7",
"10",
"11"
],
"owner": "43594f081bb6d23e9ccd254927fa47",
"recycle": true,
"locked": false,
"appdata": {},
"picture": "",
"lastupdated": "2018-02-25T03:35:57",
"version": 2 }
在这个响应中,我将假设以下输入,这似乎抓住了问题的本质:
{
"FUX9A2m4LcuF6YG": {
"name": "KitchenDay",
"lastupdated": "2018-02-25T03:35:57"
},
"later": {
"name": "KitchenNight",
"lastupdated": "2018-02-25T23:35:57"
}
}
使用该选项作为输入,以下过滤器:
to_entries | [max_by(.value.lastupdated)] | from_entries
产生:
{
"later": {
"name": "KitchenNight",
"lastupdated": "2018-02-25T23:35:57"
}
}
这里的关键是“lastupdated”字段的最大值对应于最近的时间
如果您只需要密钥名,可以改为写:
to_entries | max_by(.value.lastupdated) | .key
那么我的代码将是这样的
curl-s${BASEURL}/scenes/|/usr/local/bin/jq-r-e--arg SCENENAME“${SCENENAME}”。作为$object | keys[]|选择($object[.].name==$SCENENAME)| to| u entries |[max_by(.value.lastupdated)]| from_entries'
,因为这样会返回此消息<代码>jq:error(at:0):字符串(“FUX9A2m4Lc…)没有密钥该字符串是ID,也是密钥。有什么建议吗?请显示curl命令生成的JSON、SCENENAME的值和预期输出。另请参见,很抱歉,我刚刚意识到您要求SCENENAME的值。在我的示例中,我使用了KitchenDay。我想获取具有最新更新的val的场景密钥现在,我的代码返回与name==KitchenDay匹配的任何条目的键。