Разбор массива JSON с помощью jq - PullRequest
0 голосов
/ 29 апреля 2019

Мне нужно разобрать конкретную информацию из приведенного ниже примера JSON, используя jq.в зависимости от «репо» мне нужно иметь возможность анализировать из массива свойств все «ключевые» и «значения» и связанные с хранилищем.Например, репо «libs-production-local» должно было бы проанализировать любой ключ свойств с помощью «prod» в строке и связанного с ней значения даты.должен быть jq и работать в .sh.

{
   "results":[
      {
         "repo":"libs-production-local",
         "path":"com/company/version",
         "name":"sql.21.tar",
         "type":"file",
         "size":"40123",
         "created":"date",
         "created_by":"someone",
         "modified":"date",
         "modified_by":"someone",
         "updated":"date",
         "depth":4,
         "actual_md5":"asdflsdf23a4324234",
         "orginal_sha1":"sadlkfjsdklfjsadf",
         "properties":[
            {
               "key":"deploy.uat",
               "value":"2018-09-23"
            },
            {
               "key":"deploy.prod.TLE",
               "value":"2018-10-20"
            },
            {
               "key":"deploy.prodXYZ",
               "value":"2018-10-20"
            },
            {
               "key":"deploy.prodPDQ",
               "value":"2018-10-20"
            },
            {
               "key":"deploy.prod.ABC",
               "value":"2018-10-21"
            },
            {
               "key":"businessUnit.name",
               "value":"IndivdualName"
            },
            {
               "key":"deploy.qa.ser2",
               "value":"2018-10-20"
            },
            {
               "key":"deploy.qa.ser1",
               "value":"2018-11-23"
            },
            {
               "key":"build.timestamp",
               "value":"1510850899004"
            }
         ],
         "virtual_repos":[
            "libs-production "
         ]
      },
      {
         "repo":"libs-production-local",
         "path":"com/company/version",
         "name":"sql.22.tar",
         "type":"file",
         "size":"40123",
         "created":"date",
         "created_by":"someone",
         "modified":"date",
         "modified_by":"someone",
         "updated":"date",
         "depth":4,
         "actual_md5":"asdflsdf23a4324234",
         "orginal_sha1":"sadlkfjsdklfjsadf",
         "properties":[
            {
               "key":"deploy.prodPDQ",
               "value":"2018-10-22"
            },
            {
               "key":"deploy.prodABC",
               "value":"2018-10-20"
            },
            {
               "key":"businessUnit.name",
               "value":"IndivdualName"
            },
            {
               "key":"deploy.qa",
               "value":"2018-10-20"
            },
            {
               "key":"deploy.dev",
               "value":"2018-11-19"
            }
         ],
         "virtual_repos":[
            "libs-production "
         ]
      }
   ],
   "range":{
      "start_pos":0,
      "end_pos":479,
      "total":479
   }
}

Я пробовал несколько способов сделать это (включая этот), и ничего не работает.

jq -r '.results[] |  ( .properties |map(select(.key[] contains ("prod")) '

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

также, вот альтернативное решение, основанное на Unix-инструменте Walk-Path для JSON: jtc:

bash $ <file.json jtc -w'[key]:<prod>R:[-1]' -j
[
   {
      "key": "deploy.prod.TLE",
      "value": "2018-10-20"
   },
   {
      "key": "deploy.prodXYZ",
      "value": "2018-10-20"
   },
   {
      "key": "deploy.prodPDQ",
      "value": "2018-10-20"
   },
   {
      "key": "deploy.prod.ABC",
      "value": "2018-10-21"
   },
   {
      "key": "deploy.prodPDQ",
      "value": "2018-10-22"
   },
   {
      "key": "deploy.prodABC",
      "value": "2018-10-20"
   }
]
bash $ 

PS> Раскрытие информации:Я создатель инструмента jtc

0 голосов
/ 29 апреля 2019

Я решил это так:

jq -r '[ .results[].properties[] | select(.key | contains("prod")) ]'

Это позволяет получить все пары ключ-значение из каждой массива свойств результата. Затем он выбирает те, которые содержат «prod» в ключе, и возвращает массив этих ключей и значений. Учитывая ваш пример ввода сверху, это возвращаемое значение:

[
  {
    "key": "deploy.prod.TLE",
    "value": "2018-10-20"
  },
  {
    "key": "deploy.prodXYZ",
    "value": "2018-10-20"
  },
  {
    "key": "deploy.prodPDQ",
    "value": "2018-10-20"
  },
  {
    "key": "deploy.prod.ABC",
    "value": "2018-10-21"
  },
  {
    "key": "deploy.prodPDQ",
    "value": "2018-10-22"
  },
  {
    "key": "deploy.prodABC",
    "value": "2018-10-20"
  }
]

Это близко к тому, что вы ищете?

...