2012-11-17 68 views
1

我正在實現我自己的JSONEncoder來完全按照我需要的方式處理不同的類。不幸的是,我的自定義編碼器返回的格式不正確。它們被引號包圍,某些字符(引號)被轉義。自定義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\"}" 

我使用Python 2.7。

如何防止此行爲?我做錯了什麼?

回答

3

default應該返回一個對象,而不是JSON的塊:

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

實現此方法在子類中,使得其返回鄰一個序列化的對象,或稱基本實現(引發TypeError)。

+0

非常感謝,我一定錯過了這部分。由於更正的代碼和文檔鏈接,我將您的答案標記爲正確答案。 – MOnsDaR

1

而不是

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

嘗試返回一個對象,而不是

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

書面,圖書館得到一個字符串編碼成JSON引述它和轉義特殊字符。

相關問題