您可以編寫一個高度specialzed編碼器和解碼鉤:你不是打算
import json
class MultiDimensionalArrayEncoder(json.JSONEncoder):
def encode(self, obj):
def hint_tuples(item):
if isinstance(item, tuple):
return {'__tuple__': True, 'items': item}
if isinstance(item, list):
return [hint_tuples(e) for e in item]
else:
return item
return super(MultiDimensionalArrayEncoder, self).encode(hint_tuples(obj))
def hinted_tuple_hook(obj):
if '__tuple__' in obj:
return tuple(obj['items'])
else:
return obj
enc = MultiDimensionalArrayEncoder()
jsonstring = enc.encode([1, 2, (3, 4), [5, 6, (7, 8)]])
print jsonstring
# [1, 2, {"items": [3, 4], "__tuple__": true}, [5, 6, {"items": [7, 8], "__tuple__": true}]]
print json.loads(jsonstring, object_hook=hinted_tuple_hook)
# [1, 2, (3, 4), [5, 6, (7, 8)]]
尼斯。非常類似於[pymongo](https://github.com/mongodb/mongo-python-driver/blob/master/bson/json_util.py)。要完成,'encode'中應該有'dict'分支。 – georg
這就是爲什麼它是專門的:) OP的陣列似乎沒有字跡。 –
謝謝!我花了一分鐘閱讀代碼,但我明白了,這正是我需要的。這與我在多維數組上進行遞歸的方式是一樣的。我現在正在做「json之外」的鉤子,所以也許我應該閱讀'object_hook's。 – mrKelley