将json值从file设置为redis

时间:2017-11-18 16:30:55

标签: json bash redis redis-cli

我有一个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值?

2 个答案:

答案 0 :(得分:6)

如果您尝试将stringmy-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