Использование jq для возврата конкретной информации в объект JSON - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу проанализировать отдельные элементы внутреннего объекта JSON для сборки / загрузки в базу данных.

Ниже приведен объект JSON.Как я могу разобрать элементы, такие как идентификатор, очередь имен и т. Д.?Я буду повторять его в цикле, работать и строить запрос на вставку.

{
  "apps": {
    "app": [
      {
        "id": "application_1540378900448_18838",
        "user": "hive",
        "name": "insert overwrite tabl...summary_view_stg_etl(Stage-2)",
        "queue": "Data_Ingestion",
        "state": "FINISHED",
        "finalStatus": "SUCCEEDED",
        "progress": 100
       }, 
       {
        "id": "application_1540378900448_18833",
        "user": "hive",
        "name": "insert into SNOW_WORK...metric_definitions')(Stage-13)",
        "queue": "Data_Ingestion",
        "state": "FINISHED",
        "finalStatus": "SUCCEEDED",
        "progress": 100                                                         
        }
      ]
  }

  }

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вам лучше преобразовать данные в формат, легко используемый процессором базы данных, например, csv, а затем что-то с этим сделать.

$ jq -r '(.apps.app[0] | keys_unsorted) as $k
    | $k, (.apps.app[] | [.[$k[]]])
    | @csv
' input.json
0 голосов
/ 30 ноября 2018

это довольно простой выборочный элемент, имеющий массив значений.

 var JSONOBJ={
      "apps": {
        "app": [
          {
            "id": "application_1540378900448_18838",
            "user": "hive",
            "name": "insert overwrite tabl...summary_view_stg_etl(Stage-2)",
            "queue": "Data_Ingestion",
            "state": "FINISHED",
            "finalStatus": "SUCCEEDED",
            "progress": 100
           }, 
           {
            "id": "application_1540378900448_18833",
            "user": "hive",
            "name": "insert into SNOW_WORK...metric_definitions')(Stage-13)",
            "queue": "Data_Ingestion",
            "state": "FINISHED",
            "finalStatus": "SUCCEEDED",
            "progress": 100                                                         
            }
          ]
      }
    
    }
    
    JSONOBJ.apps.app.forEach(function(o){console.log(o.id);console.log(o.user);console.log(o.name);})
...