У меня есть значение JSON
{
"RandomKey1": "3.1.44.0",
"Common": {
"Services": "3.50.103.0",
"Common": "3.50.103.0"
}
}
Я хочу получить значение RandomKey1
. Как вы уже догадались, имя ключа меняется каждый раз, когда я загружаю страницу, поэтому мне нужно получить значение 0-го ключа. Он гарантированно будет на 0-й позиции
Я ожидал хоть какого-то результата от этого
cat result.json | jq -r '.[0]'
но вместо этого я получаю ошибку
jq: error (at <stdin>:0): Cannot index object with number.
Я попробовал функцию keys
, и она возвращает ключи, как и ожидалось. Однако функции values
нет, иначе я мог бы получить значения и вернуть только первый элемент
cat result.json | jq -r 'keys'
Есть ли способ получить 0-е значение из этой строки, когда имя ключа неизвестно?
Вы можете использовать функцию to_entries
, чтобы добраться туда!
jq 'to_entries|.[0].value' file.json
должен сделать трюк.
Из jq
документа:
Если to_entries передается объект, затем для каждой записи k:v на входе выходной массив включает {"key": k, "value": v}.
Итак, после этого ваш json будет выглядеть так:
[
{
"key": "RandomKey1",
"value": "3.1.44.0"
},
{
"key": "Common",
"value": {
"Services": "3.50.103.0",
"Common": "3.50.103.0"
}
}
]
где вы можете найти первый ключ и соответствующее ему значение.
Вы ищете первый/1.
first(.[])
Если вы, по крайней мере, знаете, что первое значение всегда является скалярным, тогда вы можете отбросить остальную часть ввода, чтобы не исчерпать память и не тратить процессорное время.
$ jq --stream -n 'input[1]' file
"3.1.44.0"
Я попробовал функцию
keys
Вы можете использовать функцию keys_unsorted
следующим образом:
.[keys_unsorted[0]]