Как объединить массив в JSON - PullRequest
0 голосов
/ 10 октября 2018

Борьба с форматированием данных в jq.У меня 2 проблемы.

  1. Нужно взять последний массив .rental_methods и объединить их в 1 строку, разделенную двоеточием.
  2. @csv, похоже, не работает с моим запросом,Я получаю сообщение об ошибке string ("5343") cannot be csv-formatted, only array

jq команда это (без | @csv)

jq --arg LOC "$LOC" '.last_updated as $lu | .data[]|.[]| $lu, .station_id, .name, .region_id, .address, .rental_methods[]'

JSON:

{
    "last_updated": 1539122087,
    "ttl": 60,
    "data": {
        "stations": [{
            "station_id": "5343",
            "name": "Lot",
            "region_id": "461",
            "address": "Austin",
            "rental_methods": [
                "KEY",
                "APPLEPAY",
                "ANDROIDPAY",
                "TRANSITCARD",
                "ACCOUNTNUMBER",
                "PHONE"
                ]
            }
        ]
    }
}

Я быкак вывод, чтобы закончить как:

1539122087,5343,Lot,461,Austin,KEY:APPLEPAY:ANDROIDPAY:TRANSITCARD:ACCOUNTNUMBER:PHONE:,

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете восстановить ваш фильтр jq следующим образом:

.last_updated as $lu
| .data[][]
| [$lu, .station_id, .name, .region_id, .address, 
   (.rental_methods | join(":"))]
| @csv

С вашим JSON это приведет к:

1539122087,"5343","Lot","461","Austin","KEY:APPLEPAY:ANDROIDPAY:TRANSITCARD:ACCOUNTNUMBER:PHONE"

... что не совсем то, что вы сказалиты хочешь.Изменение последней строки на:

map(tostring) | join(",")

приводит к:

1539122087,5343,Lot,461,Austin,KEY:APPLEPAY:ANDROIDPAY:TRANSITCARD:ACCOUNTNUMBER:PHONE

Это именно то, что вы указали, что вы хотите, за исключением завершающей пунктуации, которую вы можете легко добавить (например,добавив + "," к программе выше), если это необходимо.

0 голосов
/ 10 октября 2018

Использование @csv:

jq -r '.last_updated as $lu
  | .data[][]
  | [$lu, .station_id, .name, .region_id, .address, (.rental_methods | join(":")) ]
  | @csv'

То, что вы, вероятно, упускали с @csv, раньше было конструктором массива в списке того, что вы хотели в записи CSV.

...