JQ:过滤键
JQ: Filtering for keys
我正在尝试使用 JQ 命令过滤 json 对象以 select 有效地提取密钥。这是我放在文件 x.txt:
中的示例对象
{
"activities" : {
"-KSndgjqvmQkWVKHCpLh" : {
"create_device" : "...",
"stop_time_utc" : "2016-11-01T23:08:08Z"
},
"-KSoBSrBh6PZcjRocGD7" : {
"create_device" : "..."
},
"-KSptboGjo8g4bieUbGM" : {
"create_device" : "...",
"stop_time_utc" : "2017-01-17T23:08:08Z"
}
}
}
以下命令可以提取所有 activity 键:
cat x.txt | jq '.activities | keys'
[
"-KSndgjqvmQkWVKHCpLh",
"-KSoBSrBh6PZcjRocGD7",
"-KSptboGjo8g4bieUbGM"
]
我已经用谷歌搜索和试验了几个小时,试图将对象过滤为 select 只有具有 stop_time_utc 值的 activity 条目,并使用类似“select(.stop_time_utc | fromdateiso8601 > now)”只选择已过期的活动。例如,我想使用过滤器从示例对象创建一个数组,其中只有一个相关条目:
[
"-KSndgjqvmQkWVKHCpLh"
]
尝试使用 keys 选项是否走错了路?任何想法或建议将不胜感激。
with_entries/1
是您的朋友,例如:
.activities | with_entries( select(.value | has("stop_time_utc") ) )
产生:
{
"-KSndgjqvmQkWVKHCpLh": {
"create_device": "...",
"stop_time_utc": "2016-11-01T23:08:08Z"
},
"-KSptboGjo8g4bieUbGM": {
"create_device": "...",
"stop_time_utc": "2017-01-17T23:08:08Z"
}
现在可以轻松添加额外的选择标准、提取感兴趣的键名称等。例如:
.activities
| with_entries( select( (.value.stop_time_utc? | fromdateiso8601?) < now ) )
| keys
我正在尝试使用 JQ 命令过滤 json 对象以 select 有效地提取密钥。这是我放在文件 x.txt:
中的示例对象{
"activities" : {
"-KSndgjqvmQkWVKHCpLh" : {
"create_device" : "...",
"stop_time_utc" : "2016-11-01T23:08:08Z"
},
"-KSoBSrBh6PZcjRocGD7" : {
"create_device" : "..."
},
"-KSptboGjo8g4bieUbGM" : {
"create_device" : "...",
"stop_time_utc" : "2017-01-17T23:08:08Z"
}
}
}
以下命令可以提取所有 activity 键:
cat x.txt | jq '.activities | keys'
[
"-KSndgjqvmQkWVKHCpLh",
"-KSoBSrBh6PZcjRocGD7",
"-KSptboGjo8g4bieUbGM"
]
我已经用谷歌搜索和试验了几个小时,试图将对象过滤为 select 只有具有 stop_time_utc 值的 activity 条目,并使用类似“select(.stop_time_utc | fromdateiso8601 > now)”只选择已过期的活动。例如,我想使用过滤器从示例对象创建一个数组,其中只有一个相关条目:
[
"-KSndgjqvmQkWVKHCpLh"
]
尝试使用 keys 选项是否走错了路?任何想法或建议将不胜感激。
with_entries/1
是您的朋友,例如:
.activities | with_entries( select(.value | has("stop_time_utc") ) )
产生:
{
"-KSndgjqvmQkWVKHCpLh": {
"create_device": "...",
"stop_time_utc": "2016-11-01T23:08:08Z"
},
"-KSptboGjo8g4bieUbGM": {
"create_device": "...",
"stop_time_utc": "2017-01-17T23:08:08Z"
}
现在可以轻松添加额外的选择标准、提取感兴趣的键名称等。例如:
.activities
| with_entries( select( (.value.stop_time_utc? | fromdateiso8601?) < now ) )
| keys