формат запроса json jq

#json #jq

#json #jq

Вопрос:

Мне нужна помощь для извлечения данных из этого файла JSON с помощью jq.

Затем приложение flv проверяет, что mystrame имя потока активно, и извлекает meta.video.height

Я пробовал много запросов без успеха, и мои знания jq невелики.

 {
  "port": 1935,
  "server_index": 0,
  "applications": [{
      "name": "hls",
      "live": {
        "streams": [{
          "name": "donbosco",
          "time": 2380739,
          "bw_in": 2112440,
          "bytes_in": 541618713,
          "bw_out": 0,
          "bytes_out": 0,
          "bw_audio": 35544,
          "bw_video": 2076888,
          "clients": [{
            "id": 453,
            "address": "127.0.0.1",
            "time": 2380959,
            "flashver": "FMLE/3.0 (compatible; Lavf57.83.100)",
            "dropped": 0,
            "avsync": 28,
            "timestamp": 2382635,
            "publishing": true,
            "active": true
          }],
          "records": [],
          "meta": {
            "video": {
              "width": 1168,
              "height": 720,
              "frame_rate": 25,
              "codec": "H264",
              "profile": "High",
              "level": 3.1
            },
            "audio": {
              "codec": "AAC",
              "profile": "LC",
              "channels": 2,
              "sample_rate": 16000
            }
          },
          "nclients": 1,
          "publishing": true,
          "active": true
        }],
        "nclients": 1
      },
      "recorders": {
        "count": 0,
        "lists": []
      }
    },
    {
      "name": "flv",
      "live": {
        "streams": [{
          "name": "mystream",
          "time": 2382811,
          "bw_in": 2059096,
          "bytes_in": 541841549,
          "bw_out": 2059096,
          "bytes_out": 543351459,
          "bw_audio": 35472,
          "bw_video": 2023624,
          "clients": [{
              "id": 452,
              "address": "127.0.0.1",
              "time": 2382727,
              "flashver": "LNX 9,0,124,2",
              "dropped": 0,
              "avsync": -12,
              "timestamp": 2384520,
              "publishing": false,
              "active": true
            },
            {
              "id": 451,
              "address": "127.0.0.1",
              "time": 2383031,
              "flashver": "FMLE/3.0 (compatible; Lavf58.74.100)",
              "dropped": 0,
              "avsync": -12,
              "timestamp": 2384520,
              "publishing": true,
              "active": true
            }
          ],
          "records": [],
          "meta": {
            "video": {
              "width": 1168,
              "height": 720,
              "frame_rate": 25,
              "codec": "H264",
              "profile": "High",
              "level": 3.1
            },
            "audio": {
              "codec": "AAC",
              "profile": "LC",
              "channels": 2,
              "sample_rate": 16000
            }
          },
          "nclients": 2,
          "publishing": true,
          "active": true
        }],
        "nclients": 2
      },
      "recorders": {
        "count": 0,
        "lists": []
      }
    }
  ]
}
 

Ответ №1:

Вы просите помощи с JSON-процессором командной строки jq или библиотекой JavaScript jQuery? Они не совпадают. Для jq попробуйте

 jq '
  .applications
  | map(select(.name == "flv"))[].live.streams
  | map(select(.name == "mystream" and .active))[].meta.video.height
'
 
 720
 

ДЕМОНСТРАЦИЯ

Комментарии:

1. Я полагаю, что он просит помощи с jq. Я ошибочно отредактировал вопрос, чтобы изменить jq на jQuery с учетом тегов, однако я пропустил jq tg. Я вернул язык в вопросе к тому, каким он был. OP должен пометить вопрос гораздо более четко и приложить некоторые усилия.

2. Вот и все ! да, я хочу использовать jq. Большое вам спасибо pmf и да, извините, что задаю такой вопрос…. Он работает нормально.