我正在用jq拔头发。直到我尝试执行此操作之前,它对我使用过的每件事都有效。
我有一个完整的JSON对象,嵌套对象的深度各不相同。
这是一个简化的示例:
{
"api": "blah/v1",
"metadata": {
"labels": {}
}
}
此json是在go应用程序中解析的。
“标签”与go中的map [string] string对象相关。
我需要成对使用shell变量,并将它们注入此数据结构中。
遵循以下原则:
JSON=`echo ${JSON} | jq --arg $key KEY --arg $val VAL '.metadata.labels += { KEY: VAL }'`
我尝试使用--argjson,我尝试了单引号,双引号,转义等...都无济于事。我无法想象jq不能做这么简单的事情。我倾注了无数指南,但我只能找到一个例子,说明他们在作业的右侧使用变量,如下所示:
JSON=`echo ${JSON} | jq --arg $key KEY --arg $val VAL '.metadata.labels += { KEY: $VAL }'`
这可能是我本周已经工作了60个小时,直到今天才开始。但这使我难以理解。我需要花30秒钟才能完成的工作已经花了我一个小时的时间。
答案 0 :(得分:1)
key=foo
val=bar
json='
{
"api": "blah/v1",
"metadata": {
"labels": {}
}
}
'
jq --arg key "$key" --arg val "$val" '.metadata.labels[$key] = $val' <<<"$json"
...正确发出作为输出:
{
"api": "blah/v1",
"metadata": {
"labels": {
"foo": "bar"
}
}
}