繁体   English   中英

如果 object 不存在,则使用 jq 在每个 object 中插入一个键值对

[英]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 的typename键之间。

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.

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