如何用json.loads将含未知函数的字符串反序列化为目标字典?
处理含未知函数的类JSON字符串反序列化
我有如下格式的字符串:
test = '{"key1":"value1", "key2": UnknownFunction("value2")}'
由于其中包含未知函数UnknownFunction,无法直接使用json.loads进行反序列化。我希望找到简便方法,将这类未知函数(或任意未知函数)映射为str类型,最终得到如下字典:
{"key1":"value1", "key2": "value2"}
我当前使用以下代码实现了需求,但想了解是否有更优方案:
for removable in ["UnknownFunction"]: test= test.replace(removable + "(", "") test = test.replace(")", "") data = json.loads(test)
更优方案:正则表达式批量处理
原方法的局限性在于只能处理提前指定的函数名,遇到新的未知函数需要手动更新列表。使用正则表达式可以一次性匹配任意函数调用格式,直接提取括号内的目标内容:
import re import json test = '{"key1":"value1", "key2": UnknownFunction("value2")}' # 匹配任意函数调用,替换为括号内的内容 processed_str = re.sub(r'\w+\((.*?)\)', r'\1', test) data = json.loads(processed_str) print(data) # 输出: {'key1': 'value1', 'key2': 'value2'}
正则规则说明
\w+:匹配由字母、数字、下划线组成的函数名,覆盖绝大多数常规函数命名\(:匹配函数调用的左括号(.*?):非贪婪模式捕获括号内的所有内容,作为提取目标\):匹配函数调用的右括号- 替换为
\1,即保留捕获到的括号内内容
如果你的场景中函数名包含特殊字符(比如连字符、点号),可以将\w+调整为[\w\-.]+这类更适配的规则,根据实际情况灵活修改。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

