如何将CSV数据按ID为键、JSON字符串为值的格式插入Redis
解决方案:CSV批量导入Redis生成转义JSON字符串值
你之前的命令异常是因为没有正确构造合法的转义JSON结构,同时引号转义逻辑不符合redis-cli的解析规则,可参考以下两种方案:
方案一:awk拼接(适合CSV无特殊字符场景)
如果你的CSV字段内不包含逗号、双引号等特殊字符,直接用awk即可完成拼接导入:
tail -n +2 dnis.csv | awk -F ',' '{ # 构造带转义的JSON字符串 json_val = sprintf("{\\\"Value1\\\":\\\"%s\\\",\\\"Value2\\\":\\\"%s\\\",\\\"Value3\\\":\\\"%s\\\"}", $2, $3, $4) # 输出符合Redis要求的SET命令 print "SET \"" $1 "\" \"" json_val "\"" }' | redis-cli --pipe
方案二:csvkit+jq处理(兼容性更强,适合含特殊字符的CSV)
如果字段存在特殊字符,建议用专业的CSV和JSON处理工具避免解析错误,先安装csvkit和jq后执行以下命令:
csvjson dnis.csv | jq -c '.[]' | while read -r row; do # 提取ID作为Redis的Key key=$(echo "$row" | jq -r '.ID') # 剔除ID字段后将剩余内容转为转义后的JSON字符串 value=$(echo "$row" | jq -c 'del(.ID)' | sed 's/"/\\"/g') echo "SET \"$key\" \"$value\"" done | redis-cli --pipe
结果验证
导入完成后执行GET 1,即可返回符合要求的结果:
"{\"Value1\":\"A\",\"Value2\":\"B\",\"Value3\":\"C\"}"
内容的提问来源于stack exchange,提问作者JC_Rambo
相关产品推荐
相关产品推荐

