Можно ли извлечь все ключевые значения внутри фигурных скобок второго уровня, игнорируя значения в первом уровне фигурных скобок - PullRequest
0 голосов
/ 11 января 2019

С помощью JQ я пытаюсь прочитать / извлечь значения, присутствующие на втором уровне фигурных скобок (.phone, .termination, .duration, игнорируя значения, присутствующие на первом уровне фигурных скобок (12345, 67891) и 78912, которые уже повторяются в фигурных скобках второго уровня. Можно ли это сделать?

{
    "12345":[{
        "phone": "12345",
        "termination": "picked-up",
        "duration": 5
        }],
    "67891":[{
        "phone": "67891",
        "termination": "picked-up",
        "duration": 10
    }],
    "78912":[{
        "phone": "78912",
        "termination": "busy",
        "duration": 0
    }]
}

Я пробовал фильтровать значения, определяя фильтры ключевых слов, которые меня интересуют, но я явно пропускаю дополнительные первые шаги. Также необходимо учитывать квадратные скобки. Ty

cat test.json | jq [.phone, .termination, .duration] | less

Я бы хотел, чтобы строка содержала значения, разделенные запятыми, для трех описанных фильтров.

12345, picked-up, 5,
67891, picked-up, 10,
78912, busy, 0

1 Ответ

0 голосов
/ 11 января 2019

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

.[] | [.[][]] | @csv

В противном случае:

.[][]
| [.phone, .termination, .duration]
| @csv

В любом случае вы, возможно, захотите использовать параметр командной строки -r для получения:

"12345","picked-up",5
"67891","picked-up",10
"78912","busy",0

Некотируемые

Если вы хотите подавить кавычки, вы можете использовать следующее, опять же с опцией -r:

.[] | [.[][]] | join(", ")

или

.[][] | "\(.phone), \(.termination), \(.duration)"

С параметром командной строки -r эти два последних результата дают:

12345, picked-up, 5
67891, picked-up, 10
78912, busy, 0
...