重命名数组内对象的属性

Dev*_*hat 5 jq

这是我的输入 JSON

{
"uuid":123,
"description": [
    {
        "car_name":"Toyota",
        "saleDate":"23 May 2017"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

预期输出:

{
"uuid":123,
"description": [
    {
        "name":"Toyota",
        "saleDate":"23 May 2017"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

规则:.description[]|={name:.car_name,saleDate}

我能够通过这条规则达到预期的结果。但是,有没有一种方法可以将“car_name”属性重命名为“name”,并且在规则中不提及所有其他属性(在本例中为“saleDate”)。我可能最终在对象中拥有 50 多个属性,我不想在规则中提及所有这些属性。

数组中可以有多个对象。

use*_*693 0

这是你想要的吗?

 jq '.description[]
     |= . +
       if has("car_name") then {"name":.car_name}
       else null end
     | del(.description[].car_name)'
Run Code Online (Sandbox Code Playgroud)

if-then 块将对象 {name:.car_name} 添加到描述数组中具有名称为“car_name”的键的任何对象,并向数组中不具有名称为“car_name”的键的任何对象添加任何内容(空)那个名字。

del 函数删除路径表达式 .description[].car_name 处的键值对