Использование jq для преобразования списка карт в массив - PullRequest
0 голосов
/ 06 июня 2019

Я изо всех сил пытаюсь получить форматированный вывод из команды сканирования aws dynamicodb. Элемент в таблице DynamodB выглядит следующим образом:

{
   "labels": {
    "Category": [
      "Data",
      "EMR"
    ],
   "Environment": "NonProd",
   "Severity": "Critical"
   },
  "subscriber_id": "blah@blah.com",
  "subscriber_type": "email"
}

Когда я запускаю запрос:

aws dynamodb scan --table-name dummy_table --region region_name -- 
profile default --query "Items[?subscriber_id.S == 
'blah@blah.com'].labels.M[]"

Я получаю вывод, как показано ниже:

[
{
    "Environment": {
        "S": "NonProd"
    },
    "Severity": {
        "S": "Critical"
    },
       "Category": {
            "L": [
                {
                   "S": "Data"
                },
               {
                    "S": "EMR"
               }
            ]
       }
    }
]

Желаемый результат:

    {
        "Category": [
        "Data",
        "EMR"
        ],
       "Environment": "NonProd",
       "Severity": "Critical"
    }

Чтобы добиться желаемого результата, я пытался манипулировать с помощью jq.

Обновленный запрос:

    aws dynamodb scan --table-name dummy_table --region 
 region_name -- 
   profile default --query "Items[?subscriber_id.S == 
   'blah@blah.com'].labels.M[]" |
   jq -r '.[] 
     | to_entries[] 
     | [{key:.key, value:.value[]}] 
     | from_entries' | jq -s add

Вывод:

{
  "Environment": "NonProd",
  "Severity": "Critical",
  "Category": [
    {
      "S": "Data"
    },
    {
      "S": "EMR"
    }
  ]
}

Как видите, он близок, но не обрабатывает список категорий. Любая помощь с получением желаемого результата приветствуется.

Спасибо

1 Ответ

1 голос
/ 06 июня 2019

Вы можете использовать следующее:

.[] | { Environment: .Environment.S, Severity: .Severity.S, Category: (.Category.L | map(.S)) }

Выход:

{
  "Environment": "NonProd",
  "Severity": "Critical",
  "Category": [
    "Data",
    "EMR"
  ]
}

Попробуйте здесь !

...