JSON

2012-08-01 2 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를 ("추가 데이터",의, 끝을, LEN (들)))

어떤 제안이?

+2

글쎄, 그래. 그것은 JSON이 아닙니다. –

+1

'key_1 '뒤에 따옴표를 이스케이프 처리하지 않은 슬래시가 있습니까? 그것으로 적어도 이상한 JSON 연결 만합니다. 그것이 없으면 파이썬도 유효하지 않습니다. –

답변

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이되지 않습니다. –

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

나는 많은 시도를 시도했지만이 하나 {..}{..}{..} 예제의 부하를 처리 할 수 ​​있습니다.