在Python 2.7+我可以使用object_pairs_hook
內建JSON模塊中改變解碼對象的類型。無論如何,對列表做同樣的事情嗎?的Python:更改列表類型JSON解碼
一種選擇是要經過,我得到作爲參數傳遞給鉤,並用我自己的列表類型取代它們的對象,但沒有任何其他的,更聰明的方式?
在Python 2.7+我可以使用object_pairs_hook
內建JSON模塊中改變解碼對象的類型。無論如何,對列表做同樣的事情嗎?的Python:更改列表類型JSON解碼
一種選擇是要經過,我得到作爲參數傳遞給鉤,並用我自己的列表類型取代它們的對象,但沒有任何其他的,更聰明的方式?
與你將需要繼承JSONDecoder列表類似的東西。下面是一個簡單的例子,像object_pairs_hook
一樣工作。這使用字符串掃描的純python實現而不是C實現。
import json
class decoder(json.JSONDecoder):
def __init__(self, list_type=list, **kwargs):
json.JSONDecoder.__init__(self, **kwargs)
# Use the custom JSONArray
self.parse_array = self.JSONArray
# Use the python implemenation of the scanner
self.scan_once = json.scanner.py_make_scanner(self)
self.list_type=list_type
def JSONArray(self, s_and_end, scan_once, **kwargs):
values, end = json.decoder.JSONArray(s_and_end, scan_once, **kwargs)
return self.list_type(values), end
s = "[1, 2, 3, 4, 3, 2]"
print json.loads(s, cls=decoder) # [1, 2, 3, 4, 3, 2]
print json.loads(s, cls=decoder, list_type=list) # [1, 2, 3, 4, 3, 2]
print json.loads(s, cls=decoder, list_type=set) # set([1, 2, 3, 4])
print json.loads(s, cls=decoder, list_type=tuple) # set([1, 2, 3, 4, 3, 2])
根據源代碼,這是不可能的:C級函數顯式實例化內置的list
類型而不使用任何回調/掛鉤。主幹也一樣。