如何使用 jq [重复]读取 bash 变量中带连字符的键的 json 值

问题描述 投票:0回答:0

我正在尝试解析其键中包含连字符的 json 属性的值。

  1. 我使用子 shell 命令将 json 内容读入变量

    srcJson=$(someshellcommand)

  2. 我将变量通过管道传输到 jq 读取操作中(并且还通过管道将其进一步传输到 sed 以进行一些更改 - 但不是重点)

    value=$(echo $srcJson | jq .root.parent.$srcKey | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g')

我在 mac 上的 bash 脚本中运行代码。

如果 $srcKey 变量中没有任何连字符,这种方法就可以正常工作,但如果它有连字符,则会出现以下错误

jq: error: Part1OfHypenatedKey/0 is not defined at <top-level>
jq: error: Part2OfHypenatedKey/0 is not defined at <top-level>

尝试将带有连字符的变量放在引号内 - 没有任何区别

value=$(echo $srcJson | jq .root.parent."$srcKey" | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g')

尝试将整个 jq 键引用放在引号中 - 但根本没有用,可能是我在子 shell 命令和 jq 上做错了(不是 bash 专家)

value=$(echo $srcJson | jq ".root.parent.$srcKey" | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g')

bash jq
© www.soinside.com 2019 - 2024. All rights reserved.