我有一个 bash.sh 脚本:
#!/usr/bin/env bash
val=$(cat ../my-microservice/conf/config.json)
echo "set my-microservice-config ${val}" | redis-cli
config.json 在哪里:
{
"key" : "value"
}
当我运行它时,我得到:
ERR 未知命令 '}'
如何从 json 文件中正确设置 json 值?
如果您尝试将 key 的字符串值设置my-microservice-config
为 JSON 文件的内容(或任何其他内容,包括二进制文件),最简单的方法是使用-x
选项 in逐字redis-cli
读取命令的最后一个参数,从stdin
. 例如:
$ redis-cli -x set my-microservice-config < config.json
OK
对于您的示例,这将存储:
$ redis-cli get my-microservice-config
"{\n \"key\" : \"value\"\n}\n"
要存储 JSON 数据的紧凑表示,您可以使用jq .
with -c
标志:
$ jq -c . config.json | redis-cli -x set my-microservice-config
OK
$ redis-cli get my-microservice-config
"{\"key\":\"value\"}\n"
请注意,Redis 本身并不支持 JSON,但如果您需要解释的 JSON 值(JSON 数据类型),可以使用ReJSON 模块。
您需要在值上使用引号,因为它包含空格 - 将脚本的最后一行更改为:
echo "set my-microservice-config \"${val}\"" | redis-cli