4

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

4

2 回答 2

15

如果您尝试将 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 模块。

于 2017-11-18T17:01:16.157 回答
1

您需要在值上使用引号,因为它包含空格 - 将脚本的最后一行更改为:

echo "set my-microservice-config \"${val}\"" |  redis-cli
于 2017-11-18T17:50:02.307 回答