将字符串存储到json对象python中

时间:2017-05-25 08:30:09

标签: python json

我已经阅读了很多关于此的问题,但无法找到str。

我有一个长字符串,包含16个字节的名称,后跟4个字节的数字,并为N个人重复。示例如下:

*编辑:1)字符串是msg

2)将迈克添加到预期输出

msg = 'George\0\0\0\0\0\0\0\0\0\0' + '0095' + 'Mikeeeeeeeeeeee\0' + '0100' + 'Kelly\0\0\0\0\0\0\0\0\0\0\0' + '0000'

现在我需要将这些数据存储到json对象中。我尝试过循环,但它总是重写之前存储的数据。我想要的东西如下所示,但是因为为每个数据写入msg [start:end]完全被延迟,所以需要更长的字符串。

data = {}
data[msg[0:16]] = {
    "marks" : msg[16:20]
}
data[msg[20:36]] = {
    "marks" : msg[36:40]
}
data[msg[40:56]] = {
    "marks" : msg[56:60]
}

预期输出:

{
"George\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000": {
    "marks": "0095"
    }, 
"Kelly\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000": {
    "marks": "0000"
    },
 "Mikeeeeeeeeeeee\u0000": {
    "marks": "0100"
    }
}

由于

2 个答案:

答案 0 :(得分:2)

假设你想要data中的所有对象细节,即George,mike和kelly,并且只有当你访问76及以后,你的msg长度为60 ..因此开始追加你的对象。你应该根据你想要的输出结果制作一个嵌套的json,如:

length = len(msg)
i = 0
data = {}
while i < length:
    data[msg[i:i+16]] = {"marks" : msg[i+16:i+20]}
    i += 20
print data

输出:

{'George\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': {'marks': '0095'}, 'Mikeeeeeeeeeeee\x00': {'marks': '0100'}, 'Kelly\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': {'marks': '0000'}}

希望这有帮助

答案 1 :(得分:1)

import re
dict(re.findall(r'(\D+)(\d{4})', string))

它将返回响应,如..

{'George\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': '0095', 'Kelly\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00': '0000', 'Mikeeeeeeeeeeee\x00': '0100'} 

当你现在把它作为dict时,可以用你想要的任何格式改变它。