2012-11-17 3 views
1

필자는 다른 클래스를 정확하게 처리하기 위해 자체 JSyncncoder를 구현하고 있습니다. 불행히도 내 사용자 지정 인코더가 잘못된 형식의 문자열을 반환합니다. 그들은 따옴표로 묶이고 특정 문자 (따옴표)는 이스케이프됩니다.사용자 정의 JSONEncoder가 잘못된 형식의 문자열을 반환합니다.

동작을 재현하려면 다음 코드를 사용하십시오 : 나는 파이썬 2.7 사용하고

import json 

class CustomEncoder(json.JSONEncoder): 
    def default(self, givenObject): 
     #for testing purposes this always returns the same string 
     str = '{"id":0,"name":"Peter"}' 
     return str; 

class AnyClass(object): 
    pass 

encoder = CustomEncoder() 
dummyClass = AnyClass() 

#expected output: {"id":0,"name":"Peter"} 
print encoder.encode(dummyClass) 

#output: "{\"id\":0,\"name\":\"Peter\"}" 

.

이 동작을 어떻게 막을 수 있습니까? 내가 뭘 잘못 했니? 객체를 반환하는 대신

str = '{"id":0,"name":"Peter"}' 
    return str; 

시도의

답변

3

default 객체가 아닌 JSON의 덩어리 반환해야합니다 :

import json 

class CustomEncoder(json.JSONEncoder): 
    def default(self, givenObject): 
     obj = {"id":0,"name":"Peter"} 
     return obj 

class AnyClass(object): 
    pass 

encoder = CustomEncoder() 
dummyClass = AnyClass() 

print encoder.encode(dummyClass) # {"id": 0, "name": "Peter"} 

http://docs.python.org/library/json.html#json.JSONEncoder.default :

그것은 O를위한 직렬화 객체를 반환하거나 호출하도록 서브 클래스에서이 메소드를 구현을 기본 구현 (TypeError 발생).

+0

감사합니다.이 부분을 놓쳐 버렸을 것입니다. 수정 된 코드와 문서에 대한 링크로 인해 답변을 올바른 것으로 표시하고 있습니다. – MOnsDaR

1

대신

return {"id":0,"name":"Peter"} 

기록으로, 라이브러리는 문자열을 가져옵니다 및 JSON에 그것이 인용 및 특수 문자를 이스케이프 인코딩합니다.

관련 문제