2016-09-06 3 views
1

맞춤 인코딩을 시도했지만 오류가 발생합니다. 기본 사전이 성공적으로 표시됩니다Python에서 json 인코딩 문제가 발생했습니다.

{"first": "Jay", "last": "Loophole"} 
Traceback (most recent call last): 
    File "json_dump.py", line 26, in <module> 
    print(json.dumps(c, cls=ContactEncoder)) 
    File "/usr/lib/python3.5/json/__init__.py", line 237, in dumps 
    **kw).encode(obj) 
    File "/usr/lib/python3.5/json/encoder.py", line 198, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode 
    return _iterencode(o, 0) 
    File "/usr/lib/python3.5/json/encoder.py", line 179, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <__main__.Contact object at 0x7ffb3445a400> is not JSON serializable 

하지만, 사용자 정의 인코딩은 CLS 매개 변수로 전달 될 때 오류가 발생합니다 오류가 발생

#!/usr/bin/python3 

import json 

class Contact: 
    def __init__(self, first, last): 
    self.first = first 
    self.last = last 

    @property 
    def full_name(self): 
    return ("{} {}".format(self.first, self.last)) 

class ContactEncoder(json.JSONEncoder): 
    def defualt(self, obj): 
    if isinstance(obj, Contact): 
     return {"is_contact": 'T' 
       ,"first": obj.first 
       ,"last": obj.last 
       ,"full_name": obj.full_name} 
    return super().defualt(obj) 

if __name__ == "__main__": 
    c = Contact("Jay", "Loophole") 
    print(json.dumps(c.__dict__)) 
    print(json.dumps(c, cls=ContactEncoder)) 

입니다 : 다음 코드 샘플에서 오류가 발생합니다. 오류의 원인에 대한 제안 사항이 있으십니까?

import json 

class Contact: 
    def __init__(self, first, last): 
    self.first = first 
    self.last = last 

    @property 
    def full_name(self): 
    return ("{} {}".format(self.first, self.last)) 

class ContactEncoder(json.JSONEncoder): 
    def default(self, obj): 
    if isinstance(obj, Contact): 
     return {"is_contact": 'T' 
       ,"first": obj.first 
       ,"last": obj.last 
       ,"full_name": obj.full_name} 
    return super().default(obj) 

if __name__ == "__main__": 
    c = Contact("Jay", "Loophole") 
    print(json.dumps(c.__dict__)) 
    print(json.dumps(c, cls=ContactEncoder)) 

당신은 this page에서 라이브를 확인할 수 있습니다 :

+0

오타? 'defualt()'는'default()'이어야합니다. – dhke

+0

@dhke 바로 그 것입니다. 오타를 수정하면 제대로 작동합니다. –

+0

위대한, 감사합니다, 충분하지 않은주의! – alortimor

답변

0

다음은 defUAlt --> defAUlt 보정 후 업데이트 된 코드입니다.

관련 문제