json
シリアル化の方法がわからないオブジェクトに遭遇したときにPythonのライブラリが例外をスローしないようにするための良い方法は何ですか?
dictオブジェクトをシリアル化するために使用json
していますが、オブジェクトのプロパティがjson
ライブラリによって認識されず、例外がスローされることがあります。例外をスローする代わりに、代わりにdictのそのプロパティをスキップしたほうがいいでしょう。プロパティ値を「なし」に設定したり、「シリアル化できません」というメッセージを設定したりすることもできます。
現在、これを行う方法を私が知っている唯一の方法はjson
、例外をスローする可能性のある各データ型を明示的に識別してスキップすることです。ご覧のとおり、オブジェクトを文字列に変換するだけでなく、ライブラリdatetime
からいくつかのジオポイントオブジェクトをスキップしています。shapely
import json
import datetime
from shapely.geometry.polygon import Polygon
from shapely.geometry.point import Point
from shapely.geometry.linestring import LineString
# This sublcass of json.JSONEncoder takes objects from the
# business layer of the application and encodes them properly
# in JSON.
class Custom_JSONEncoder(json.JSONEncoder):
# Override the default method of the JSONEncoder class to:
# - format datetimes using strftime('%Y-%m-%d %I:%M%p')
# - de-Pickle any Pickled objects
# - or just forward this call to the superclass if it is not
# a special case object
def default(self, object, **kwargs):
if isinstance(object, datetime.datetime):
# Use the appropriate format for datetime
return object.strftime('%Y-%m-%d %I:%M%p')
elif isinstance(object, Polygon):
return {}
elif isinstance(object, Point):
return {}
elif isinstance(object, Point):
return {}
elif isinstance(object, LineString):
return {}
return super(Custom_JSONEncoder, self).default(object)