Когда я скручиваю API и получаю следующие данные (примерные данные):
[
{
"identifier": "IdNum",
"name": "TopCatA",
"subCategories": [
{
"categoryId": "19232",
"identifier": "83434",
"name": "Mens",
"sequence": 10,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"PrimaryHoverImage": "model1",
"categoryLabel": "Mens Clothing & Accessories",
"viewall": "false"
},
"subCategories": [
{
"categoryId": "23423423",
"identifier": "456456456",
"name": "Shirts",
"categoryImage": "gfhhfghfg",
"sequence": 1,
"attributes": {
"CategoryGroupType": "features",
"PrimaryFaceOutImage": "false",
"viewall": "false"
}
},
{
"categoryId": "3423423",
"identifier": "234234234234",
"name": "Jeans",
"categoryImage": "sdfadsf-sdfas-asdf-sdfasdf"
}
]
},
{
"categoryId": "234234234",
"identifier": "45345",
"name": "Womens",
"sequence": 12,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"PrimaryHoverImage": "model1",
"categoryLabel": "Womens Clothing & Accessories",
"viewall": "false"
},
"subCategories": [
{
"categoryId": "23423423",
"identifier": "456456456",
"name": "Shirts",
"categoryImage": "gfhhfghfg",
"sequence": 1,
"attributes": {
"CategoryGroupType": "features",
"PrimaryFaceOutImage": "false",
"viewall": "false"
}
},
{
"categoryId": "3423423",
"identifier": "234234234234",
"name": "Jeans",
"categoryImage": "sdfadsf-sdfas-asdf-sdfasdf"
}
]
},
{
"categoryId": "23423423",
"identifier": "SOME_SALE",
"name": "Sale",
"sequence": 23,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"PrimaryHoverImage": "model1",
"viewall": "false"
}
}
]
},
{
"identifier": "IdNum",
"name": "TopCatB",
"subCategories": [
{
"categoryId": "234234",
"identifier": "45345",
"name": "Boys",
"sequence": 43,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"PrimaryHoverImage": "model1",
"categoryLabel": "Boys Clothing & Accessories",
"viewall": "false"
},
"subCategories": [
{
"categoryId": "23423423",
"identifier": "456456456",
"name": "Shirts",
"categoryImage": "gfhhfghfg",
"sequence": 1,
"attributes": {
"CategoryGroupType": "features",
"viewall": "false"
}
},
{
"categoryId": "3423423",
"identifier": "234234234234",
"name": "Jeans",
"categoryImage": "sdfadsf-sdfas-asdf-sdfasdf"
}
]
},
{
"categoryId": "345234",
"identifier": "345345345",
"name": "Girls",
"sequence": 10,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"categoryLabel": "Girls Clothing & Accessories",
"viewall": "false"
},
"subCategories": [
{
"categoryId": "23423423",
"identifier": "456456456",
"name": "Shirts",
"categoryImage": "gfhhfghfg",
"sequence": 1,
"attributes": {
"CategoryGroupType": "features",
"viewall": "false"
}
},
{
"categoryId": "3423423",
"identifier": "234234234234",
"name": "Jeans",
"categoryImage": "sdfadsf-sdfas-asdf-sdfasdf"
}
]
},
{
"categoryId": "23423423",
"identifier": "SOME_SALE",
"name": "Sale",
"sequence": 45,
"attributes": {
"PrimaryFaceOutImage": "prod1",
"categoryLabel": "Sale",
"displaySoldOut": "true",
"viewall": "false"
}
}
]
}
]
Я пытаюсь применить фильтр jq, чтобы в нем остались только имена и значения всех подкатегорий. сохраняя вложенную структуру и имея ОБА TopCatA и TopCatB в конечном выводе. Проблема в том, что одна из подкатегорий (продажа) не имеет подкатегорий, как другие (мужские, женские), поэтому я получаю сообщение Cannot iterate over null (null)
.
Я пробовал несколько разных фильтров jq, но, похоже, не могу получить гнездо, чтобы сохранить. Конечный результат, который я ищу, - получить что-то вроде этого:
[
{
"identifier": "IdNum",
"name": "TopCatA",
"subCategories": [
{
"name": "Mens",
"subCategories": [
{
"name": "Shirts"
},
{
"name": "Jeans"
}
]
},
{
"name": "Womens",
"subCategories": [
{
"name": "Shirts"
},
{
"name": "Jeans"
}
]
},
{
"name": "Sale"
"subCategories": NULL
}
]
}
]
Вот некоторые из jq-запросов, которые я пробовал:
cat ~/temp/testData.json | jq --tab '[.[] | {name: .name, subCat1: [.subCategories[].name], subCat2: [.subCategories[].subCategories[]?.name]} ]'
<- бесполезно, так как вложение потеряно </p>
Я пытаюсь выполнить sh это только с помощью фильтров и каналов, так как я не слишком силен в выборе в jq.