我有一个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值?
答案 0 :(得分:6)
如果您尝试将string值my-microservice-config
设置为JSON文件的内容(或任何其他内容,包括二进制文件),最简单的方法是使用{ {3}}要读取命令的最后一个参数,来自stdin
。例如:
$ redis-cli -x set my-microservice-config < config.json
OK
对于您的示例,这将存储:
$ redis-cli get my-microservice-config
"{\n \"key\" : \"value\"\n}\n"
要存储JSON数据的紧凑表示,可以使用-x
option in redis-cli
标志:
$ jq -c . config.json | redis-cli -x set my-microservice-config
OK
$ redis-cli get my-microservice-config
"{\"key\":\"value\"}\n"
请注意,Redis本身不支持JSON,但如果需要jq .
with -c
(JSON数据类型),则可以使用ReJSON module。
答案 1 :(得分:1)
您需要在值包含空格时使用引号 - 将脚本的最后一行更改为:
echo "set my-microservice-config \"${val}\"" | redis-cli