jq - поток помощи, необходимой для анализа json - PullRequest
0 голосов
/ 03 сентября 2018

У меня очень большой текст JSON, который мне нужно проанализировать с помощью

jq --stream 

Однако, нет никаких сложных случаев использования или блогов, чтобы понять это.

Структура JSON выглядит следующим образом:

{
  "userActivities": {
    "-----P9E3PJB5bTO1xrO": {
      "aaid": "84dae6bd-cb3a-409c-9940-844f035b5fc7",
      "callsign": "2day",
      "deviceId": "1b771f137d1bc6ea",
      "dow": "Thursday",
      "downloadFlag": "N",
      "email": "ckcafeandcatering@gmail.com",
      "emailSha256": "6ab0992297a9478be9ae7ff26d811b1116c45a0c819ff1c9628c9b7ca4ec4129",
      "event": "streamStop",
      "firebaseUID": "anvlMojJFvQEvMXQW6GeRzLKCIA2",
      "halfHourFull": "10h1",
      "liveFlag": "Y",
      "localDate": "1970-01-01",
      "localHalfHour": 1,
      "login": "google",
      "minutesSinceMidnight": 601,
      "quarterHourFull": "10q1",
      "stationName": "2DayFM104.1"
    },
    "-GuGCJDEprMKczAMDUj8": {
      "deviceId": "399a649c6cee6209",
      "dow": "Thursday",
      "downloadFlag": "N",
      "event": "streamStart",
      "halfHourFull": "18h1",
      "liveFlag": "Y",
      "localDate": "2009-01-01",
      "localHalfHour": 1,
      "minutesSinceMidnight": 1080,
      "quarterHourFull": "18q1",
      "stationName": "hit 105",
      "streamListenMethod": "Headphones",
      "timestampLocal": "2009-01-01T18:00:33.679+10:00",
      "timestampUTC": "2009-01-01T08:00:33.679Z"
    }
  }
}

Я хочу установить фильтр для localDate, то есть выбирать только те массивы, где localDate = '2009-01-01'.

В настоящее время я передаю свой JSON нижеприведенной команде, и она выдает все массивы.

jq -cn --stream 'fromstream(1|truncate_stream(inputs | select(.[0][] == "userActivities") | del(.[0][0])))'

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

1 Ответ

0 голосов
/ 03 сентября 2018

Работа с выводом вашего существующего шаблона:

  • Добавить этот фильтр:

    select(.localDate == "2009-01-01")
    
  • Таким образом, ваша измененная команда становится:

    jq -cn --stream 'fromstream(1|truncate_stream(inputs | select(.[0][] == "userActivities") | del(.[0][0]))) <strong>| select(.localDate == "2009-01-01")</strong>'
...