python - 使用 python 解析带有\uxxx字符的json

标签 python json encoding

我有 JSON 数据,其中包含带有转义字符的文本数据字段,例如 \n\u4e0d 等。

使用Python 2.7,我的目标是将其“按原样”写入CSV,即\n作为\n\u4e0d\u4e0d。 (原始字符串)

str(data["text"]).encode('string_escape') 对于 \n 可以按预期工作,但对于 \u 则不然>,给出错误: UnicodeEncodeError: 'ascii' 编解码器无法在位置 32 编码字符 u'\u4e0d'

如果我尝试 data["text"]).encode('utf-8').encode('string_escape') 它可以工作,但会破坏 \u输入如 \xe4\xb8\x8d

data = json.loads(line)
writer.writerow(data["text"]).encode('utf-8').encode('string_escape'))

有办法实现我的需求吗?

非常感谢

最佳答案

编程的挑战之一是如何编写非显示字符,例如执行操作而不是显示字形的换行符。 Python 使用反斜杠 加上附加字符来表示这些字符。对于字符串,python repr 函数为您提供字符串的反斜杠转义表示形式,就像您在输入字符串一样。

如果我输入示例字符串并打印它,...我会得到新行和 unicode 字形,但写入 ascii csv 会导致 unicode 解码错误。

>>> test = u'\n hello \u4e0d'
>>> print test

 hello 不
>>> 

但是如果我打印字符串表示形式,那就是我最初输入的内容

>>> print repr(test)
u'\n hello \u4e0d'
>>> 

如果我不需要 python 字符串部分,我可以将其删除

>>> print repr(test)[2:-1]
\n hello \u4e0d
>>> 

哪个更好取决于该字符串接下来会发生什么。如果您想稍后返回真实字符串,请坚持使用 python 表示形式,然后使用 ast.literal_eval 再次返回它。

>>> test2 = repr(test)
>>> original = ast.literal_eval(test2)
>>> original == test
True

关于python - 使用 python 解析带有\uxxx字符的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145667/

相关文章:

python - 填充一维 numpy 数组的最快方法

javascript - 如何在没有页面源且没有 JSON 的情况下使 AJAX 读回响应?

php - 带有 JSON 和 PHP 的动态行不会输出数据

Python 3 编码错误谷歌翻译 API

java - Solr 编码/解码数据

Python os.rename() 用于父目录中多个子文件夹中的文件

python - SQLALchemy 查询 : Unresolved attribute reference 'query' for class 'Car'

java - 在 Java 中将字符串 (rfc4122) 编码为数字,在 PHP 中解码

python - 为什么分组的struct.pack会写入错误的数据?

javascript - 获取并检查数组的 javascript 数组