如何在变量有句点时使用jq

Jon*_*old 11 key special-characters jq

我正在努力让以下工作,而不是,请帮助我:

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq .OPEN.BTC
Run Code Online (Sandbox Code Playgroud)

有问题的变量包括一个时期,我试图逃避这段时间的所有事情&&也尝试用引号围绕它; 不去; 这是我想要的变量(我在没有任何过滤器的情况下运行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"
},
....
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 15

当密钥包含对标识符无效的字符时,您必须引用该名称.

."OPEN.BTC"
Run Code Online (Sandbox Code Playgroud)

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

.["OPEN.BTC"]
Run Code Online (Sandbox Code Playgroud)

  • 确保引用过滤器,最好使用单引号.不要让它不加引号.即,这样做:`... | jq'."OPEN.BTC"'` (10认同)
  • 我尝试了这两个,它们都为我返回 null,我在 jq 1.5 (2认同)
  • 我建议将注释 `jq '."OPEN.BTC"'` 作为回复,因为没有单引号它就不起作用(我使用的是 jq 1.6)。 (2认同)
  • @JeffMercado,您可以在答案本身中包含您使用单引号的建议吗?这可能会为下一个人节省一些时间 (2认同)

Kum*_*ran 13

另一个答案对我不起作用,但@jeff-mercado写的评论对我有用。所以,在这里添加它作为答案。

如果你的钥匙有像“OPEN.BTC”这样的点,那么你的jq命令应该是

curl -s 'https://cryptofresh.com/api/asset/markets?asset=MKR' | jq '."OPEN.BTC"'
Run Code Online (Sandbox Code Playgroud)

将键放在双引号中,然后通过使用单引号将第一个点括起来来转义它。