繁体   English   中英

使用jq从json获取父值

[英]Get parent value from json using jq

我的json文件看起来像这样;

{
 "RQBTYFE86MFC3oL": {
    "name": "Nightmode",
    "lights": [
      "1",
      "2",
      "3",
      "4",
      "5",
      "7",
      "8",
      "9",
      "10",
      "11"
    ],
    "owner": "kvovodUUfn2vlby9h9okdDhv8SrTzkBFjk6kPz2v",
    "recycle": false,
    "locked": false,
    "appdata": {
      "version": 1,
      "data": "QSXCj_r01_d99"
    },
    "picture": "",
    "lastupdated": "2018-08-08T03:21:39",
    "version": 2
  }
}

我想通过查询“ Nightmode”来获取“ RQBTYFE86MFC3oL”值。 到目前为止,我想到了这个。

jq '.[] | select(.name == "Nightmode")'

这将为我返回Json的正确部分,但是'RQBTYFE86MFC3oL'部分被剥去了。 我也该如何获得这部分?

确定与满足特定条件的值相对应的键名的一种简单方法是使用to_entries ,如jq手册中所述。

使用这种方法,合适的jq过滤器将是:

to_entries[] | select(.value.name == "Nightmode") | .key 

结果:

"RQBTYFE86MFC3oL"

如果要获取键值对,请按以下方式使用with_entries

with_entries( select(.value.name == "Nightmode") )

如果输入的JSON太大而无法舒适地容纳在内存中,则使用jq的流解析器(通过--stream命令行选项调用)是有意义的:

jq --stream '
  select(.[1] == "Nightmode" and (first|length) == 2 and first[1] == "name")
  | first | first' 

这将产生密钥名称。

关键思想是流解析器生成的数组包括以下形式的对:[ARRAYPATH,VALUE]其中VALUE是ARRAYPATH上的值。

您想获取键值。

因此,请使用keys命令,返回“ RQBTYFE86MFC3oL”,因为这是键,其余部分是该键的值。

jq 'keys'

这是一个代码段: https : //jqplay.org/s/YvpCb2PH42

参考: https : //stedolan.github.io/jq/manual/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM