У меня есть этот файл 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ñ'}}]}]}
Затем, применяя следующий код, json, хранящийся в d
, преобразуется в вложенный 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
— вполне допустимый альтернативный способ представления символов. - person jwodder   schedule 30.05.2019