我有以下数据:
d = "{\"key_1": \" val_1\", \"key_2\": \"val_2\"}{\"key_3\": \" val_3\", \"key_4\": \"val_4\"}"
我想将其翻译成字典列表,例如
d_list = [{\"key_1": \" val_1\", \"key_2\": \"val_2\"}, {\"key_3\": \" val_3\", \"key_4\": \"val_4\"}]
有什么建议吗?
答案 0 :(得分:5)
您可以使用JSONDecoder
及其raw_decode()
方法来完成此操作。 raw_decode()
将读取一个完整的JSON对象,并返回一个元组,其第一个成员是对象,第二个是解码器停止读取的字符串的偏移量。
基本上,您需要读取一个对象,然后将其存储在数组中,然后从字符串中读取下一个对象,依此类推,直到您位于字符串的末尾。像这样:
import json
def read_json_objects(data):
decoder = json.JSONDecoder()
offset = 0
while offset < len(data):
item = decoder.raw_decode(data[offset:])
yield item[0]
offset += item[1]
d = '{"key_1": " val_1", "key_2": "val_2"}{"key_3": " val_3", "key_4": "val_4"}'
print json.dumps(list(read_json_objects(d)))
哪个会输出:
[{"key_1": " val_1", "key_2": "val_2"}, {"key_4": "val_4", "key_3": " val_3"}]
答案 1 :(得分:0)
这不是有效的JSON,你应该尝试在两个对象之间添加一个逗号
d = "{\"key_1": \" val_1\", \"key_2\": \"val_2\"}, {\"key_3\": \" val_3\", \"key_4\": \"val_4\"}"
答案 2 :(得分:0)
我也有类似的问题,我得到{key1:val1, key2:val2}{key1:val1, key2:val2}
。我能解决的唯一方法就是:
def json_parser(msg):
msg=msg.split("{")
for i in msg:
L=i.split("}")
msg_new={}
for j in L:
if j:
LL=j.split(",")
for l in LL:
msg_new[string.strip(l.split(":")[0]).replace('"','')]=string.strip(l.split(":")[1]).replace('"','')
return msg_new
其中....
try:
data_loaded=json.loads(data)
except:
data_loaded=json_parser(str(data))
我尝试了很多尝试,但是这个尝试可以处理大量{..}{..}{..}
个例子。