有没有办法在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。
我有以下 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。