2012-08-01 77 views
1

我有以下数据:的Json与多个词典

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\"}] 
  1. json.loads(d)给我类型的错误:提高ValueError异常(ERRMSG( “额外数据”,S端,LEN(S)))

有什么建议?

+2

嗯,是的。这不是JSON。 – 2012-08-01 18:59:15

+1

在'key_1'之后是否有一个缺少斜线的报价?因此,它至少只是奇怪的JSON连接。没有它,它甚至不是有效的Python。 – 2012-08-01 19:03:44

回答

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"}] 
0

这不是有效的JSON,你应该尝试在两个对象之间添加一个逗号。
d = "{\"key_1": \" val_1\", \"key_2\": \"val_2\"}, {\"key_3\": \" val_3\", \"key_4\": \"val_4\"}"

+2

逗号仍然不会使其有效JSON。 – 2012-08-01 19:05:47

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)) 

我试了很多尝试,但是这一次可以处理的{..}{..}{..}例子负荷。