У меня есть сложный JSON файл, который содержит сотни «атрибутов» с их типами, идентифицированными как «objectTypeAttributeId».
Я знаю, что objectTypeAttributeId = 328 означает tickedid, objectTypeAttributeId = 329 содержит массив имен хостов et c ..
Существует упрощенная версия файла:
{
"objectEntries": [
{
"attributes": [
{
"id": 279792,
"objectTypeAttributeId": 328,
"objectAttributeValues": [
{
"displayValue": "ITSM-24210"
}
]
},
{
"id": 279795,
"objectTypeAttributeId": 329,
"objectAttributeValues": [
{
"displayValue": "testhost1"
},
{
"displayValue": "testhost2"
}
]
},
{
"id": 279793,
"objectTypeAttributeId": 330,
"objectAttributeValues": [
{
"displayValue": "28.02.2020 11:45"
}
]
}
]
}
]
}
Мне нужно создать вывод JSON, используя определенные выбранные значения (согласно значению "objectTypeAttributeId") ввода JSON в таком формате:
{
"tickets": [
{
"ticketid": "ITSM-24210",
"hostnames": ["testhost1", "testhost2"],
"date": "28.02.2020 11:45"
}
]
}
Я новичок в jq, в XSLT это разрешимо с использованием шаблона stati c с заполнителями для выбранных значений.
I пробовал этот подход, есть мой фильтр jq:
.objectEntries[].attributes[] |
{ticketid: select(.objectTypeAttributeId == 328) | .objectAttributeValues[0].displayValue},
{hostnames: select(.objectTypeAttributeId == 329) | [.objectAttributeValues[].displayValue]},
{date: select(.objectTypeAttributeId == 330) | .objectAttributeValues[0].displayValue}
, но результат этого подхода:
{
"ticketid": "ITSM-24210"
}
{
"hostnames": [
"testhost1",
"testhost2"
]
}
{
"date": "28.02.2020 11:45"
}
И все мои последующие попытки лучше отформатировать вывод заканчиваются на ломаном jq фильтр или фильтр, который ничего не возвращает.
Пожалуйста, есть идеи, как решить эту проблему?