[英]How to insert a key-value pair after a specified key in a JSON object using jq?
[英]Insert a key value pair in each object if it is not present using jq
我正在尝试在 JSON 文件的每一行中添加一个特定的关键字,如果它不存在的话。
我的初始文件:
[{"type": "STRING", "name": "Article"},
{"type": "STRING", "name": "Sellable_UOM"},
{"type": "STRING", "name": "PriceFamilyCode"},
{"type": "STRING", "name": "PriceFamilyDescription"},
{"type": "STRING", "name": "SalesDistrict"},
{"type": "DATE", "name": "FiscalWeekendDate"},
{"type": "STRING", "mode": "REPEATED", "name": "export_sql"},
{"type": "STRING", "mode": "REPEATED", "name": "post_sql"}]
预期 output:
[{"type": "STRING", "mode": "NULLABLE", "name": "Article"},
{"type": "STRING", "mode": "NULLABLE", "name": "Sellable_UOM"},
{"type": "STRING", "mode": "NULLABLE", "name": "PriceFamilyCode"},
{"type": "STRING", "mode": "NULLABLE", "name": "PriceFamilyDescription"},
{"type": "STRING", "mode": "NULLABLE", "name": "SalesDistrict"},
{"type": "DATE", "mode": "NULLABLE", "name": "FiscalWeekendDate"},
{"type": "STRING", "mode": "REPEATED", "name": "export_sql"},
{"type": "STRING", "mode": "REPEATED", "name": "post_sql"}]
要求:如果该行包含模式值,则将其插入为“模式”:“NULLABLE”在类型和名称属性之间。
我想要达到的最终结果是从上面预期的 output 中获取字段及其相应的日期类型和模式,如下所示。
最后结果:
Article,STRING,NULLABLE
Sellable_UOM,STRING,NULLABLE
PriceFamilyCode,STRING,NULLABLE
PriceFamilyDescription,STRING,NULLABLE
SalesDistrict,STRING,NULLABLE
FiscalWeekendDate,DATE,NULLABLE
export_sql,STRING,REPEATED
post_sql,STRING,REPEATED
我试图实现的命令来自预期的 output json 是,
jq -r '.[] |[ .name, .type, .mode]|@csv' file1.json | sed s/'"'//g
下面的程序通过插入mode: "NULLABLE"
对在每个没有mode
键的 object 的type
和name
键之间。
map(select(has("mode") | not) |= {type, mode: "NULLABLE", name})
但是,如果这里的目的是将输入 JSON 转换为 CSV,我认为不需要中间结构。 假设mode
不存在或非空值,则可使用备用运算符进行直接转换,如下所示。
.[] | [.type, .mode // "NULLABLE", .name] | @csv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.