当变量有保留字符时如何使用jq?

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

我正在尝试让以下内容起作用,但事实并非如此,请帮助我:

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq .OPEN.BTC

有问题的变量包含一个句点,我尝试了几乎所有方法来转义句点 && 还尝试将其用引号引起来;不去;这是我想要从中提取的变量(我在没有任何过滤器的情况下运行了 jq,并截断了此处的输出以显示我需要的内容。提前感谢未来的问题解决者!

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq
....
 "OPEN.BTC": {
"volume24": 0.932166,
"price": 0.09995,
"updated": "2016-05-04T03:03:29.000Z"
},
....
json key special-characters jq
3个回答
115
投票

当键包含对标识符无效的字符时,您必须用引号引起来的名称。

."OPEN.BTC"

或者对于旧版本的 jq,请使用索引。

.["OPEN.BTC"]

示例

... | jq '."OPEN.BTC"'

29
投票

另一个答案对我不起作用,但@jeff-mercado写的评论对我有用。因此,将其添加为此处的答案。

如果您的密钥有“OPEN.BTC”之类的点,那么您的

jq
命令应该是

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq '."OPEN.BTC"'

将密钥放在双引号中,然后使用单引号将第一个点转义。


0
投票

这些对我来说都不起作用,因为相关字段称为“结束”。 唯一的方法是将“结束”一词替换为其他内容,例如使用 sed EndIt - 然后使用 EndIt 作为 jq 解析的字段。

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