Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jq从JSON转储中提取最新的色调场景?_Json_Jq_Chronological - Fatal编程技术网

如何使用jq从JSON转储中提取最新的色调场景?

如何使用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

我试图使用jq在传递场景名称时查找色调场景的ID。问题是,如果我更新场景,它会使用指定给它的新ID生成另一个场景。因此,当我对场景进行更改时,会返回多个结果。如何找到最新的场景?我看到有一个对象是最近更新的

以下是我到目前为止的情况:

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匹配的任何条目的键。