使用jq和命令行参数从JSON对象获取字段

使用jq和命令行参数从JSON对象获取字段,json,bash,jq,Json,Bash,Jq,假设以下JSON文件 { "foo": "hello", "bar": "world" } 我想从独立对象中的JSON对象获取foo字段,我这样做: <file jq '{foo}' { "foo": "hello" } 不幸的是,这并没有给出预期的结果{“foo”:“hello”}。 知道为什么变量的名称会进入对象吗 解决方法是显式定义对象: &

假设以下JSON文件

{ 
   "foo": "hello",
   "bar": "world"
}
我想从独立对象中的JSON对象获取
foo
字段,我这样做:

<file jq '{foo}'
{
   "foo": "hello"
}
不幸的是,这并没有给出预期的结果
{“foo”:“hello”}
。 知道为什么变量的名称会进入对象吗

解决方法是显式定义对象:

<file jq '{($myarg):.[$myarg]}'

简而言之,不可以。快捷语法只能在非常特殊的条件下使用。例如,它不能与jq键名称一起使用

选择 Q中描述的方法是首选方法,但对于记录,这里有两种备选方法:

jq --arg myarg "foo" '
  .[$myarg] as $v | {} | .[$myarg] = $v'
当然,还有另外一种选择,还有许多警告:

myarg=foo ; jq "{ $myarg }"

keys
不是jq关键字<代码>如果
是其中之一。请参阅更新。
myarg=foo ; jq "{ $myarg }"