有没有办法在python中逐条记录在redis上写json

Is there a way in python write json on redis record by record

我有以下 json 文件内容:

{
    "transactions":
       "tr1": {
            "type":"deposit",
            "account_id":123456789012345,
            "amount":20000.0
        },
       "tr2": {
            "type":"deposit",
            "account_id":555456789012345,
            "amount":20000.0
        },
    "tr3":{
            "type":"payment",
            "account_id":123456789012345,
            "amount":20000.0
        },
    "tr4":{
            "type":"transfer",
            "from":555456789012345,
            "to":123456789012345,
            "amount":20000.0
        }
}

我需要用python程序把每笔交易的信息写到Redis上!有办法做到这一点吗?

我试过了,但是它把所有东西都插入到一个键下 'traninfo'

data=json.load(f)
for i in data['transactions']:
    r.execute_command('JSON.SET','traninfo','.', json.dumps(data))

您提供的代码段的问题在于,在每个循环中,您都将整个 json 作为密钥的值。因为key是一样的,所以你在redis中写了四次相同的值。

从你的 JSON 来看,我猜你想在你的 redis 中每笔交易都有一个密钥:"tr1", "tr2", "tr3", "tr4"。如果你这样做:

for i in data['transactions']:
    print(i)

它将打印:

"tr1"
"tr2"
"tr3"
"tr4"

您可以像这样修改现有代码:

data=json.load(f)
for i in data['transactions']:
    r.execute_command('JSON.SET', i,'.', json.dumps(data['transactions'][i]))

它会做你想做的。但是,有一个更好的方法,items 函数允许您同时迭代键和值:

data=json.load(f)
for key, value in data['transactions'].items():
    r.execute_command('JSON.SET', key, '.', json.dumps(value))

我让你使用@Guy Korland关于redis的改进api。