команда jq, возвращающая ноль - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть содержимое json ниже в моем примере файла, но при использовании команды jq результат всегда равен нулю:

{
    "listingRequest": {
        "id": "016a1050-82dc-1262-cc9b-4baf3e0b7123",
        "uri": "http://localhost:9090/nifi-api/flowfile-queues/016a104a-82dc-1262-7d78-d84a704abfbf/listing-requests/016a1050-82dc-1262-cc9b-4baf3e0b7123",
        "submissionTime": "04/28/2019 19:40:58.593 UTC",
        "lastUpdated": "19:40:58 UTC",
        "percentCompleted": 0,
        "finished": false,
        "maxResults": 100,
        "state": "Waiting for other queue requests to complete",
        "queueSize": {
            "byteCount": 480,
            "objectCount": 20
        },
        "sourceRunning": false,
        "destinationRunning": false
    }
}

Я хочу получить значение счетчика байтов, т.е. byteCount. Результат должен быть 480.

Но ниже вывод, который я получаю:

cat queue.json | jq -r '.byteCount'
null

Я только что узнал, что jq не может быть установлен на наших серверах из-за ограничений.

Как мне это сделать с помощью sed / grep? Я попытался grep -Po '"byteCount":.*?[^\\]",', но не получил никакого вывода

Ответы [ 3 ]

3 голосов
/ 28 апреля 2019

Вам необходимо указать полный путь:

$ jq '.listingRequest.queueSize.byteCount' file.json
480
0 голосов
/ 29 апреля 2019

или, альтернативно, вы могли бы использовать Unix-инструмент Walk-Path для JSON: jtc, где индексация и создание вспомогательных сценариев реализованы обычным способом (как вбольшинство языков программирования):

bash $ <file.json jtc -w'[listingRequest][queueSize][byteCount]'
480

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

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

Альтернативой указанию полного пути является использование .., например,

$ jq '.. | .byteCount? // empty' queue.json 
480
...