json - 使用 jq 向动态键添加值
问题描述
我尝试用 jq 构造一个 json 对象。我从一个空对象开始,想要动态添加键和值。
这有效,但关键是不可变的。它固定为“foo”:
echo '{"foo": ["baz"]}' | jq --arg value "bar" '.foo += [$value]'
按预期输出:
{"foo": ["baz", "bar"]}
我真正想做的是这样的:
echo '{"foo": ["baz"]}' | jq --arg key "foo" --arg value "bar" '.($key) += [$value]'
不幸的是,这不起作用。这是输出:
jq: error: syntax error, unexpected '(' (Unix shell quoting issues?) at <top-level>, line 1:
.($key) += [$value]
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.($key) += [$value]
jq: 2 compile errors
我找不到解决方案或弄清楚。
我知道这行得通:jq --null-input --arg key foo '{($key): "bar"}'
但这并不能解决我的问题,因为我想将值附加到现有列表中,如您在示例中所见。
解决方案
您需要使用方括号[..]
而不是(..)
错误消息中报告的那样。做就是了
jq --arg key "foo" --arg value "bar" '.[$key] += [$value]'
这个错误行非常冗长,向您推荐正确的语法。重点#
是我的
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1
# ^^^^^^^^^^^^^
推荐阅读
- google-workspace - 如何在g套件中路由传入的非用户电子邮件ID
- haskell - Haskell中的函子:显示类型参数类型的项目的值
- html-select - 如何为选择下拉列表中的默认箭头添加填充?
- android - 在 facebook 上显示从 google play store 弹出的即时安装
- java - Android 中带有硬编码字符串的长 If-else 语句
- mysql - 在数据库中保存原始 http 请求
- javascript - 如何使左侧 div 滚动位置跟随窗口滚动位置?
- python - 简单 if/else 语句的问题(不等于或条件) - Python
- java - 由于 SocketException 导致 DTLS 握手失败,尽管套接字从未通过菜单关闭
- bash - 管道 grep 的变量值未传递到远程 ssh