私は、なぜそれが起こっているのか理解できない奇妙なシリアライズ "エフェクト"が発生しています。python jsonオブジェクトのシリアル化の奇妙な結果
基本的に、1つのプロパティが期待どおりに表されており、別のプロパティが実際には表示されていません。 たとえば、以下のテストに基づいて、 {"source_system": "ABC"、 "target_system": "DEF"} ではなく、 {"source_system": "ABC"、 "target_system" : "DEF"}
source_systemの1つのタプルがタプルだとは思えますが、なぜ私は目が見えないのでしょうか。
import json
import jsonpickle
class testclass(object):
def __init__(self,
_source_system = "",
_target_system = ""
):
self.source_system = _source_system,
self.target_system = _target_system
def to_JSON(self):
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4)
# return jsonpickle.encode(self, unpicklable=False)
def main():
test = testclass(_source_system = 'ABC', _target_system='DEF')
print(test.to_JSON())
print(jsonpickle.encode(test, unpicklable=False))
print(jsonpickle.encode(test))
#============================================================================
if __name__ == '__main__':
main()
例に示すように、私はjsonpickleと同様に、JSONライブラリーと同じ結果を取得し、その結果は次のとおりです。
{
"source_system": [
"ABC"
],
"target_system": "DEF"
}
{"source_system": ["ABC"], "target_system": "DEF"}
{"py/object": "__main__.testclass", "source_system": {"py/tuple": ["ABC"]}, "target_system": "DEF"}
なぜそれがで、source_systemはタプルだと思うんやそれを入れ[]リスト括弧内に?そして、なぜ両方のプロパティを処理/直列化しないのですか?
これは奇妙です。クラス定義をコピーして貼り付け、名前を変更しました。同じ結果です。 **その後、私はクラスdefをタイプし直し、期待どおりに動作します**。おそらく奇妙な文字か???私は自明ではなかった。 – user1289330
'self.source_system = _source_system'行の最後にコンマがあります。削除されると結果はあなたが期待するものです – finmor
フィンモールありがとう - 私の人生のために、私はそのコンマを見ることができませんでした!最初に正しい答えがあったように見えますが、答えではなくコメントでコメントをしたので、あなたに信用を与える方法がわからない、またはNikitaに答えのクレジットを与えなければならないかどうかわかります – bbaley