【问题标题】:How to you store special characters such as "//$//" in redis as a value for a key using python?如何在redis中存储特殊字符(例如“//$//”)作为使用python的键的值?
【发布时间】:2021-11-05 16:58:33
【问题描述】:

我正在尝试使用 python 将数据从 csv 文件加载到 redis 缓存中。 数据将存储在 redis HSET 中。以下是数据的存储方式

在数据文件中的列如下

(键列)

城市名称 |类型 |国家 |货币 |

纽约 |城市|美国 |美元 /$/ |

预期

Newyork:
{"type":"city", "country":"United States", "currency":"Dollars /$/"}

但是由于 python 的转义序列,数据加载我得到了额外的反斜杠

实际

Newyork:
{"type":"city", "country":"United States", "currency":"dollars ////$////"}

【问题讨论】:

  • 我想也许你在这个问题上放错了斜线。反斜杠 (\) 用于转义 JSON 中的字符,而不是 (/ )。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python caching redis backslash


【解决方案1】:

根据您的需要,您可以通过几种不同的方式完成此操作。最“原生”的方法是将字典 json 转储到 hset 键中,这假设您已经完成了 pip install redis

原生 hset

import redis
import json
Newyork = {"type":"city", "country":"United States", "currency":"Dollars /$/"}
r = redis.Redis()
r.hset('something', 'yourfield', json.dumps(NewYork))

查看我们看到的redis-console:

redis-cli
127.0.0.1:6379> hget somehas afield2
"{\"type\": \"city\", \"country\": \"United States\", \"currency\": \"Dollars /$/\"}"

这也意味着您需要 json.loads 稍后访问结果:

 import json
 import redis
 r = redis.Redis(decode_responses=True)
 xxx = json.loads('something', 'yourfield')

或者,您可以采用 redis json 并构建 json 文档。这是一个完整的例子

使用 redis json

首先,让我们启动一个支持redis-json的redis docker:

docker run -p 6379:6379 --name redis-redisjson redislabs/rejson:latest

现在,让我们使用redisjson 来存储我们的数据。这假设您已经完成了 pip install redisjson

from rejson import Client
cli = Client()
Newyork = {"type":"city", "country":"United States", "currency":"Dollars /$/"}
cli.jsonset('something', '.' Newyork)

后一种方法将存储带有 JSON 类型的内容,以及以 '.' 为根的文档。

这种方式的好处是编码和解码都是由redisjson客户端为你完成的。

【讨论】:

  • 您的观点非常正确。它是重新加载导致此问题的 JSON,因为我是在将我的 JSON 转储到变量中之后这样做的。现在由于版权问题,我无法提供整个代码,而只能提供问题。但真诚地感谢您与我分享这个解决方案。我想我需要整理一下我读取 JSON 数据的方式来解决这个问题。
  • 我很高兴@shivthedev!介意关闭此项目/将其标记为已解决?
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多