首页 > 解决方案 > Shell Script jq 在变量中读取带有句点 (.) 的 json 键

问题描述

我有一些 json 数据,如下所示:

{"spark.master": "local"}

我将它存储在一个名为json_data

json_data='{"spark.master": "local"}'

并使用 jq shell 实用程序解析它。

如上所示,密钥包含句点 (.) 字符。如果我尝试使用 jq 直接读取它,它工作正常

$ json_data='{"spark.master": "local"}'
$ val=$(echo $json_data | jq .'"spark.master"')
$ echo $val
"local"

但是如果这个键存储在一个变量中,它就不起作用

$ key="spark.master"
$ val=$(echo $json_data | jq .'$key')
jq: error: syntax error, unexpected '$' (Unix shell quoting issues?) at <top-level>, line 1:
.$key 
jq: error: try .["field"] instead of .field for unusually named fields at <top-level>, line 1:
.$key
jq: 2 compile errors


$ val=$(echo $json_data | jq ."$key")
$ echo $val
null

有人可以帮我确定这里出了什么问题吗?

标签: jsonbashshelljq

解决方案


推荐阅读