Переименуйте ключевое поле JSON со значением в объекте
Получите следующий вывод json:
[
{
"id": "47",
"canUpdate": true,
"canDelete": true,
"canArchive": true,
"info": [
{
"key": "problem_type",
"value": "PAN",
"valueCaption": "PAN",
"keyCaption": "Category"
},
{
"key": "status",
"value": 3,
"valueCaption": "Closed",
"keyCaption": "Status"
},
{
"key": "insert_time",
"value": 1466446314000,
"valueCaption": "2016-06-20 14:11:54.0",
"keyCaption": "Request time"
}
Как вы можете видеть в разделе "информация", они фактически обозначают пару ключ: значение как "ключ": "тип проблемы" и "значение": "PAN", а затем "значение Caption": "PAN" "keyCaption": "категория". Что мне нужно сделать, это переназначить файл так, чтобы в этом примере он отображался как "problem_type": "PAN" и "Category": "PAN". Каков наилучший способ перебора выходных данных для переназначения пар ключ: значение таким образом?
Как это должно быть:
[
{
"id": "47",
"canUpdate": true,
"canDelete": true,
"canArchive": true,
"info": [
{
"problem_type": "PAN",
"Category": "PAN"
},
{
"status": 3,
"Status": "Closed"
},
{
"insert_time": 1466446314000,
"Request time": "2016-06-20 14:11:54.0"
}
1 ответ
Решение
Вот решение JQ, которое использует назначение обновления |=
.[].info[] |= {(.key):.value, (.keyCaption):.valueCaption}
Пробный прогон (предполагает данные в data.json
)
$ jq -M '.[].info[] |= {(.key):.value, (.keyCaption):.valueCaption}' data.json
[
{
"id": "47",
"canUpdate": true,
"canDelete": true,
"canArchive": true,
"info": [
{
"problem_type": "PAN",
"Category": "PAN"
},
{
"status": 3,
"Status": "Closed"
},
{
"insert_time": 1466446314000,
"Request time": "2016-06-20 14:11:54.0"
}
]
}
]