2016-09-06 18 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

Typo? 'defualt()'は 'default()'でなければなりません。 – dhke

+0

@dhkeそうです。タイプミスを修正し、正常に動作します。 –

+0

偉大な、ありがとう、十分に慎重ではなかった! – alortimor

答えて

0

はここdefUAlt --> defAUlt補正後のあなたの更新されたコードです。

関連する問題