【发布时间】:2019-05-29 22:02:40
【问题描述】:
我有这个 JSON 文件,其中包含一些属于 Extended ASCII characters 的字符,例如 », •, ñ, Ó, Ä
{
"@index": "1",
"row": [
{
"col": [
{
"text": {
"@x": "1",
"#text": "Text » 1 A\\CÓ"
}
}
]
},
{
"col": [
{
"text": {
"@x": "7",
"#text": "Text • 2 Wñ"
}
}
]
}
]
}
我将它加载到d 变量中,json.load() 如下所示
import json
with open('in.json') as f:
d = json.load(f)
d 看起来像这样:
d = {'@index': '1', 'row': [{'col': [{'text': {'@x': '1', '#text': 'Text » 1 A\\CÓ'}}]}, {'col': [{'text': {'@x': '7', '#text': 'Text • 2 Wñ'}}]}]}
然后应用以下代码,将d中存储的json转换为一级嵌套json(到这里,扩展ASCII字符就可以了)
>>> z = {**d, 'row':[c['text'] for b in d['row'] for c in b['col']]}
>>> z
{'@index': '1', 'row': [{'@x': '1', '#text': 'Text » 1 A\\CÓ'}, {'@x': '7', '#text': 'Text • 2 Wñ'}]}
>>>
当我使用 json.dumps() 时出现问题,因为扩展的 ASCII 字符打印错误,如下所示。
如何解决这个问题?谢谢你的帮助。
>>> print(json.dumps(z, indent=4))
{
"@index": "1",
"row": [
{
"@x": "1",
"#text": "Text \u00bb 1 A\\C\u00d3"
},
{
"@x": "7",
"#text": "Text \u2022 2 W\u00f1"
}
]
}
>>>
【问题讨论】:
-
字符没有打印“错误”;
\uXXXX转义是表示字符的一种完全有效的替代方式。 -
但我需要它们是人类可读的。我希望有意义。
标签: python json extended-ascii