我得到了一些输入,我必须对其进行解析并转换为Dict。我不控制输入是如何生成的。
一个输入示例是u'{u\'my_key\': u\'AB\\N\'}'。注意,this应该表示一个序列化的字典。
使用多种方法无法解析此字典字符串。由于structure of the string being malformed due to the nested u的原因,使用json.loads失败。使用ast.literal_eval失败并出现(unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: malformed \N character escape错误。
我需要以某种方式清理输入,这样在用ast解析时,\N就不会被认为是ascii字符。做一个简单的replace('\\', '\\\\')似乎很容易出错,而且可能有很多边缘情况。
或者,我需要一种方法从嵌套的字符串中删除u,这样json.loads才能工作。
谢谢
发布于 2019-01-20 22:59:44
处理这种输入并不容易。事实上,我能找到的唯一解决方案是:
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之类的东西。
https://stackoverflow.com/questions/54276747
复制相似问题