json - JQ:筛选键

标签 json key filtering jq

我正在尝试使用JQ命令来过滤json对象,以有选择地提取 key 。这是我放置在文件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"
    }

  }
}
以下命令可以提取所有事件 key :
cat x.txt | jq '.activities | keys'
[
  "-KSndgjqvmQkWVKHCpLh",
  "-KSoBSrBh6PZcjRocGD7",
  "-KSptboGjo8g4bieUbGM"
]
我一直在谷歌搜索和试验了几个小时,试图过滤对象以仅选择具有stop_time_utc值的事件条目,并使用类似“select(.stop_time_utc | fromdateiso8601> now)”的内容来仅选择具有以下条件的事件:已到期。例如,我想使用过滤器从样本对象创建一个只有一个相关条目的数组:
[
  "-KSndgjqvmQkWVKHCpLh"
]
使用keys选项尝试此操作是错误的路线吗?任何想法或建议将不胜感激。
谢谢

最佳答案

with_entries/1是您的 friend ,例如:

.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

关于json - JQ:筛选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923539/

相关文章:

javascript - 获取 JSON 对象的子键名称

java - 使用流/对象方法将 JSON 解析为 Jackson

json - jq 按键值排序

ios - 快速过滤数组

python - gunicorn 访问日志格式

java - 如何使用动态键为 json 创建 POJO 类以进行改造?

dictionary - 在 Go 中使用包含 slice 字段的结构作为映射键的惯用方法是什么?

c# - 如何编写一个函数来确定一个键是否按下并经过延迟?

filtering - DSP - 通过 FFT 在频域中进行滤波

jquery - 具有大型(70,000+ 项)数据集的高效 jQuery 实时搜索