2016-12-09 4 views
0

を使用してJSONに日時を渡す私は私が行っています何 をJSONにこの値を渡したい私は プログラミングのpythonに新しいですのpython

data={ 
    'joiningdate': datetime.datetime(2016, 10, 13, 0, 0), 
    'shift': datetime.time(8, 0) 
} 

のような辞書オブジェクトが

class MyEncoder1(json.JSONEncoder): 
    def default(self, obj): 
     if isinstance(obj,datetime.date): 
      obj= datetime.datetime.strptime(obj,"%Y-%m-%d ") 
     elif isinstance(obj, datetime.datetime): 
      obj= datetime.datetime.strptime(obj,"%Y-%m-%d %H:%M:%S.%f") 
     elif isinstance(obj, datetime.time): 
      obj = datetime.time.strftime(obj,"%H:%M:%S") 
     elif isinstance(obj, Decimal): 
      obj = float(obj) 
     else: 
      obj = super(MyEncoder1, self).default(obj) 
     return obj 
    json_array = dumps(data,cls=MyEncoder1) 

である必要があり00:08:00のような印刷時間だけです 日付が印刷されていません いずれかを助けてください

答えて

0

ここに2つの間違いがあります。

まず、エンコーダはシリアル化可能なオブジェクトを返す必要があります。strptimeへのすべての呼び出しをstrftimeに置き換える必要があります。 strptime構造datetime文字列のオブジェクト(コードがTypeErrorを投げるので)と反対のものが必要です。

第2のdatetime.datetime()は、実際にはdatetime.dateのインスタンスなので、 'joineddate'フィールドがシリアル化されると、最初のブランチifが入ります。

class MyEncoder1(json.JSONEncoder): 
    def default(self, obj): 
     if isinstance(obj, datetime.datetime): 
      obj= datetime.datetime.strftime(obj,"%Y-%m-%d %H:%M:%S.%f") 
     elif isinstance(obj,datetime.date): 
      obj= datetime.datetime.strftime(obj,"%Y-%m-%d ") 
     elif isinstance(obj, datetime.time): 
      obj = datetime.time.strftime(obj,"%H:%M:%S") 
     elif isinstance(obj, Decimal): 
      obj = float(obj) 
     else: 
      obj = super(MyEncoder1, self).default(obj) 
     return obj 
+0

私はそれが唯一のOBJを与えているOBJ内の要素を印刷しています::午前8時00分○○秒 JSON配列:{「joiningdate」:{「$日付を」それはあなたがif isinstance(obj,datetime.date)elif isinstance(obj, datetime.datetime)を切り替えると動作するはずです:1476316800000}、 "shift": "08:00:00"} 同じ出力が表示され、日付の値は変更されません – venkatesh

関連する問題