加载unicode json/序列化字典失败,原因是unicode

2024-03-29 13:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一些必须解析并转换为Dict的输入。我无法控制输入是如何生成的。你知道吗

输入示例是u'{u\'my_key\': u\'AB\\N\'}'。注意,这应该表示一个序列化的字典。你知道吗

使用多种方法解析此字典字符串失败。由于structure of the string being malformed due to the nested ^{},使用json.loads失败。使用ast.literal_eval失败,出现(unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: malformed \N character escape错误。你知道吗

我需要以某种方式清理输入,这样\N在用ast解析时就不会被认为是ascii字符。做一个简单的replace('\\', '\\\\')看起来容易出错,而且可能有很多边缘情况。你知道吗

或者,我需要一种从嵌套字符串中删除u的方法,这样json.loads就可以工作了。你知道吗

谢谢


Tags: the方法key字符串json示例字典序列化
1条回答
网友
1楼 · 发布于 2024-03-29 13:19:14

处理这种输入并不容易。事实上,我能找到的唯一解决办法是:

input_data = u'{u\'my_key\': u\'AB\\N\'}'

i = input_data\
    .replace('\'', '"')\
    .replace('u', '')\
    .replace('\\', '\\\\')

data = json.loads(i)
print(type(data))
# <type 'dict'>

它可以解决您的具体例子,但我不鼓励使用它在您的项目。你知道吗

正如@snakecharmerb所说,我还建议对输入强制某种策略,并在发送json字符串之前验证它,例如使用this之类的东西。你知道吗

相关问题 更多 >