Предположим, следующий файл JSON
{
"foo": "hello",
"bar": "world"
}
Я хочу получить поле foo
из объекта JSON в автономном объекте, и я делаю это:
<file jq '{foo}'
{
"foo": "hello"
}
Сейчасполе, которое я на самом деле хочу, исходит из оболочки и задается jq
в качестве аргумента, подобного следующему:
<file jq --arg myarg "foo" '{$myarg}'
{
"myarg": "foo"
}
К сожалению, это не дает ожидаемого результата {"foo":"hello"}
.Есть идеи, почему имя переменной попадает в объект?
Обходной путь для этого состоит в том, чтобы явно определить объект:
<file jq '{($myarg):.[$myarg]}'
Хорошо, но есть ли способ использовать синтаксис ярлыка, как описано на странице руководства, но с переменной?
Вы можете использовать это для выбора определенных полей объекта: если вход является объектом с полями «user», «title», «id» и «content», и вы просто хотите «user »и« title », вы можете написать
{user: .user, title: .title}
Поскольку это так часто встречается, есть сокращенный синтаксис для него: {user, title}
.
Если это имеет значение, я использую JQ версии 1.5