2012-08-01 63 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)) 

我試了很多嘗試,但是這一次可以處理的{..}{..}{..}例子負荷。