2011-02-03 4 views
1

に私がjson documentationを見ていると私は実際にJSONデータへのPythonオブジェクトを変換して、Pythonオブジェクトに戻し、そのデータを変換する方法を理解しようとしています。上の例のような "プリミティブ"のリスト、辞書、タプルを渡すことができますが、私は非常に最小限のオブジェクトを作成してjson.dumps()に渡し、 "オブジェクトはJSONのシリアライズ可能ではありません"ということを試しました。JSONの使用量は、Python

オブジェクトJSONがシリアライズ可能にする適切な方法は何ですか?私は現在、私のオブジェクトを辞書に変換し、それをjson.dump()に渡すメソッドと、辞書を取り出して新しいオブジェクトを構築する並列メソッドを作成する方法を想像しています。しかし、それは本当に冗長と限られているように見えるので、私は何かが欠けている必要がありますように感じる。誰でも私を埋めるのを助けることができますか?次のコードで切り取ら

+0

[ベストプラクティス]タグ:http://meta.stackexchange.com/questions/60118/tag-block-request-best-practice –

+0

ああ、それは振り返ってみるとかなり役に立たないタグだろうと思う。 – dimo414

答えて

0

load()dump()を見てみましょう。各accept an object_hook functionは、通常JSONableではないオブジェクトをデコードし、エンコードします。たぶんこれがあなたのためになるでしょう。

+0

ええと、私は 'simplejson'が標準的なPythonの' json'として2.6の後に入ったと思っていました。 – dimo414

+0

@ dimo414:そうです。私は書いて15秒後にこれを実現した返事を編集しました:) – 9000

+0

ありがとう。私はhttp://www.doughellmann.com/PyMOTW/json/がPythonのドキュメントよりはるかに優れていることも発見しました。 – dimo414

0

は、Python 3テイクJSONEncoderクラスのノートとエンコード小数点および日時の実装でJSONを扱うのいくつかの側面を示しています。

import json 
from decimal import Decimal 
from datetime import datetime, date 

class JSONEncoder(json.JSONEncoder): 
    def default(self, o): 
    if isinstance(o, Decimal): 
     return float(o) 
    elif isinstance(o, (datetime, date)): 
     return o.isoformat() 
    return super().default(self,o) 

class JSONDecoder(json.JSONDecoder): 
    pass 

_Default_Encoder = JSONEncoder(
    skipkeys=False, 
    ensure_ascii=False, 
    check_circular=True, 
    allow_nan=True, 
    indent=None, 
    separators=None, 
    default=None, 
) 

_Default_Decoder = JSONDecoder(
    object_hook=None, 
    object_pairs_hook=None 
) 

Encode = _Default_Encoder.encode 
Decode = _Default_Decoder.decode 
関連する問題