我有一大堆数据,我使用JQ来构造只包含我对记录感兴趣的数据的对象。我的问题是我开始看到重复的对象,似乎我的语法不正确。
我正在使用包含平面字段和子对象数组的对象,我想要提取特定字段并创建具有我想要的所有数据的新对象。包括一些平面字段和数组对象中的一些字段。
这是一个较小的示例,可帮助演示问题tmpData.json
{
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batter": [{
"id": "1001",
"type": "Regular"
},
{
"id": "1002",
"type": "Chocolate"
},
{
"id": "1003",
"type": "Blueberry"
},
{
"id": "1004",
"type": "Devil's Food"
}
]
}
我执行此操作:cat tmpData.txt | jq {'id: .id, type: .type, batter: .batter[].id'}
哪个输出这个非json对象(它缺少逗号)
{
"id": "0001",
"type": "donut",
"batter": "1001"
}
{
"id": "0001",
"type": "donut",
"batter": "1002"
}
{
"id": "0001",
"type": "donut",
"batter": "1003"
}
{
"id": "0001",
"type": "donut",
"batter": "1004"
}
这很好。我现在有对象,每个对象包含parentID 0001
,并且数组中的不同项目在每个对象中关联。
当我跑步时:cat tmpData.txt | jq {'id: .id, type: .type, batterID: .batter[].id, batterType: .batter[].type'}
使用添加的type
字段,我会收到大量错误关联项目的重复项
{
"id": "0001",
"type": "donut",
"batterID": "1001",
"batterType": "Regular"
}
{
"id": "0001",
"type": "donut",
"batterID": "1001",
"batterType": "Chocolate"
}
{
"id": "0001",
"type": "donut",
"batterID": "1001",
"batterType": "Blueberry"
}
{
"id": "0001",
"type": "donut",
"batterID": "1001",
"batterType": "Devil's Food"
}
{
"id": "0001",
"type": "donut",
"batterID": "1002",
"batterType": "Regular"
}
{
"id": "0001",
"type": "donut",
"batterID": "1002",
"batterType": "Chocolate"
}
{
"id": "0001",
"type": "donut",
"batterID": "1002",
"batterType": "Blueberry"
}
{
"id": "0001",
"type": "donut",
"batterID": "1002",
"batterType": "Devil's Food"
}
{
"id": "0001",
"type": "donut",
"batterID": "1003",
"batterType": "Regular"
}
{
"id": "0001",
"type": "donut",
"batterID": "1003",
"batterType": "Chocolate"
}
{
"id": "0001",
"type": "donut",
"batterID": "1003",
"batterType": "Blueberry"
}
{
"id": "0001",
"type": "donut",
"batterID": "1003",
"batterType": "Devil's Food"
}
{
"id": "0001",
"type": "donut",
"batterID": "1004",
"batterType": "Regular"
}
{
"id": "0001",
"type": "donut",
"batterID": "1004",
"batterType": "Chocolate"
}
{
"id": "0001",
"type": "donut",
"batterID": "1004",
"batterType": "Blueberry"
}
{
"id": "0001",
"type": "donut",
"batterID": "1004",
"batterType": "Devil's Food"
}
现在我看到每个batterID
都在一个每个类型regular, chocolate, blueberry
的对象中。但实际上1002
只是chocolate
。
我理想的输出就像这样
[{
"id": "0001",
"type": "donut",
"batterID": "1001",
"batterType": "Regular"
},
{
"id": "0001",
"type": "donut",
"batterID": "1002",
"batterType": "Chocolate"
}]
非常感谢您的专业知识!
EDIT已解决:工作指令:cat tmpData.txt | jq '[{id, type} + (.batter[] | {batterId: .id, batterType: .type})]'
答案 0 :(得分:4)
{id: id, type: .type}
缩写为{id, type}
把所有东西放在一起:
[{id, type} + (.batter[] | {batterId: .id, batterType: .type})]