我想用jq* 创建JSON输出 *,看起来像这样:
{
"records": [
{
"id": "1234",
"song": "Yesterday",
"artist": "The Beatles"
}
]
}
我以为我必须玩弄jq的“过滤器”,在阅读文档后,我没有完全理解jq的概念。
这是我目前所得到的:
$ jq --arg id 1234 \
--arg song Yesterday \
--arg artist "The Beatles" \
'.' \
<<<'{ "records" : [{ "id":"$id", "song":"$song", "artist":"$artist" }] }'
哪个打印
{
"records": [
{
"id" : "$id",
"song" : "$song",
"artist" : "$artist"
}
]
}
我需要修改过滤器吗?我需要改变输入吗?
6条答案
按热度按时间piok6c0g1#
作为最初尝试的替代方法,可以在
jq-1.6
上使用$ARGS.positional
属性从头开始构造JSON至于 * 为什么 * 你最初的尝试没有工作,看起来你根本没有修改你的json,你的过滤器
'.'
基本上只是阅读和打印“未动”。使用--arg
设置的参数需要设置为过滤器内部的对象。nfeuvbwi2#
你正在寻找这样的东西:
花括号之间的每个变量引用都被转换为一个键值对,其中其名称是键,其值是值。将结果对象赋给
.records[0]
会强制创建周围的结构。qojgxg4l3#
给
r1zk6ea14#
我认为你把JSON/JQ弄错了:
这应该是你的JQ脚本:
这应该是你的JSON(空):
然后又道:
它产生:
vcudknz35#
从一个空的JSON开始,并添加缺失的位:
输出
基于@Inian的回答,另一种更简洁的方法可能是
kh212irz6#
jo可以构建数组和嵌套对象: