如何使用jq从指定JSON结构中提取目标数据?
用jq实现JSON字段提取与重组
需求:从给定JSON中提取指定字段并重新组织结构,具体如下:
输入JSON示例
{ "pipeline1": { "description": "Desc 1", "last_modified": "2023-11-14T09:27:50.235Z", "pipeline_metadata": { "version": 1, "type": "logstash_pipeline" }, "username": "user1", "pipeline": "code", "pipeline_settings": { "pipeline.batch.delay": 50, "pipeline.batch.size": 125, "pipeline.workers": 1, "queue.checkpoint.writes": 1024, "queue.max_bytes": "1gb", "queue.type": "memory" } } }
期望输出
{ "pipeline": "pipeline1", "description": "Desc 1", "last_modified": "2023-11-14T09:27:50.235Z", "username": "user1", "pipeline": "code" }
实现方法
完全可以用jq实现,执行以下命令即可:
jq 'to_entries[] | {pipeline: .key, description: .value.description, last_modified: .value.last_modified, username: .value.username, pipeline: .value.pipeline}' input.json
命令逻辑说明
to_entries[]:把顶层的键值对转换为包含key和value的条目,遍历每个条目;{pipeline: .key, ...}:构造新JSON对象,将原顶层键(如pipeline1)赋值给新的pipeline字段,同时提取原对象内指定的几个字段合并进去。
如果需要直接修改原文件(需jq支持--in-place参数),可使用:
jq --in-place 'to_entries[] | {pipeline: .key, description: .value.description, last_modified: .value.last_modified, username: .value.username, pipeline: .value.pipeline}' input.json
内容的提问来源于stack exchange,提问作者user2771833
相关产品推荐
相关产品推荐

