1

必要に応じてさまざまなクラスを処理するために、独自のJSONEncoderを実装しています。残念ながら、私のカスタムエンコーダーはやや不正な形式の文字列を返します。それらは引用符で囲まれ、特定の文字(引用符)はエスケープされます。

次のコードを使用して、動作を再現してください。

import json

class CustomEncoder(json.JSONEncoder):
    def default(self, givenObject):
        #for testing purposes this always returns the same string
        str = '{"id":0,"name":"Peter"}'
        return str;

class AnyClass(object):
    pass

encoder = CustomEncoder()
dummyClass = AnyClass()

#expected output: {"id":0,"name":"Peter"}
print encoder.encode(dummyClass)

#output: "{\"id\":0,\"name\":\"Peter\"}"

Python2.7を使用しています。

どうすればこの動作を防ぐことができますか?私は何を間違えますか?

4

2 に答える 2

3

defaultjsonのチャンクではなく、オブジェクトを返す必要があります。

import json

class CustomEncoder(json.JSONEncoder):
    def default(self, givenObject):
        obj = {"id":0,"name":"Peter"}
        return obj

class AnyClass(object):
    pass

encoder = CustomEncoder()
dummyClass = AnyClass()

print encoder.encode(dummyClass) # {"id": 0, "name": "Peter"}

http://docs.python.org/library/json.html#json.JSONEncoder.default

このメソッドをサブクラスに実装して、oのシリアル化可能なオブジェクトを返すか、基本実装を呼び出します(TypeErrorを発生させるため)。

于 2012-11-17T20:02:43.723 に答える
1

それ以外の

    str = '{"id":0,"name":"Peter"}'
    return str;

代わりにオブジェクトを返してみてください

    return {"id":0,"name":"Peter"}

記述されているように、ライブラリは文字列を取得し、それを引用符で囲んで特殊文字をエスケープすることにより、JSONにエンコードします。

于 2012-11-17T20:02:42.617 に答える