Я вижу 2 маршрута, которые вы можете использовать с этим
- Попробуйте сначала десериализовать его с
JSON.loads
, итерировать каждое свойство и заменять все искаженные ключи перед подачей это к зефиру, или - Используйте класс
JSON.JSONDecoder
и сверните свою собственную функцию object_hook
. Затем вызовите функцию .decode()
, прежде чем кормить ее зефиром.
Я подробно остановился на последнем (что мне кажется более подходящим)
from json import loads, JSONDecoder
s = """{
"obj1": 123,
"list": [
{"example2": 42},
{"sera:blah": false},
{"object:3": {"nest:ed": "obj"}}
]
}"""
data = loads(s)
print(data)
def obj_transform(obj):
for key in obj.keys(): # Iterate through obj
if ':' in key:
obj[key.replace(':', '_')] = obj.pop(key)
return obj
decoder = JSONDecoder(object_hook=obj_transform)
print(decoder.decode(s))
Результат печати:
{'obj1': 123, 'list': [{'example2': 42}, {'sera: blah': False}, {'object : 3 ': {' nest: ed ':' obj '}}]}
{' obj1 ': 123,' list ': [{' example2 ': 42}, {' sera_blah ': False}, { 'object_3': {'nest_ed': 'obj'}}]}
Это похоже на то, что вы ищете, чтобы обезопасить ваш ввод в зефир.