3

データにシリアル化したカスタムオブジェクトがありJSONます。シリアル化後、データをファイルに書き戻しJSONます。これは機能しているようですが、ファイルに書き戻すJSONは文字列になりました(つまり、で始まり、"で終わります")。

したがって、新しいファイルを解析対象にロードしようとすると、パーサーはそれが文字列であると判断し、エラーが発生します。

 TypeError: string indices must be integers

次のようにしてオブジェクトをシリアル化します。

class myEncoder(JSONEncoder):
    def default(self, o):
        return o.__dict__

次に、このクラスを呼び出します。

with open('updatedMapData.json', 'w') as outfile:
            json.dump(myEncoder().encode(jsonToEncode) , outfile)

myEncoder().encode(data)完全に戻りますが、書き込むとき、ファイルは長い文字列です。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

ただ行う:

outfile.write(myEncoder().encode(jsonToEncode))
于 2013-02-28T14:55:47.760 に答える
0

json.dumpの最初の引数はJSONに変換するオブジェクトですが、クラスをcls引数として渡すことができるため、次のように呼び出す必要があります。

json.dump(jsonToEncode, outfile, cls=myEncoder)
于 2013-02-28T15:03:39.687 に答える