Это должно быть кусок пирога, но я новичок в Python, и я не могу понять, как это сделать:
У меня есть файл JSON, который я получил Извлекая мои личные данные из Facebook, это всего лишь кусок файла:
[
{
"timestamp": 1575826804,
"attachments": [
],
"data": [
{
"post": "This is a test line with character \u00c3\u00ad and \u00c3\u00b3"
},
{
"update_timestamp": 1575826804
}
],
"title": "My Name"
},
{
"timestamp": 1575826526,
"attachments": [
],
"data": [
{
"update_timestamp": 1575826526
}
],
"title": "My Name"
},
{
"timestamp": 1575638718,
"data": [
{
"post": "This is another test line with character \u00c3\u00ad and \u00c3\u00b3 and line breaks\n"
}
],
"title": "My Name escribi\u00c3\u00b3 en la biograf\u00c3\u00ada de Someone."
},
{
"timestamp": 1575561399,
"attachments": [
{
"data": [
{
"external_context": {
"url": "https://youtu.be/lalalalalalaaeeeE"
}
}
]
}
],
"data": [
{
"update_timestamp": 1575561399
}
],
"title": "My Name"
}
]
В файле много кодов Unicode, таких как "\ u00c3 \ u00ad", которые мне нужно преобразовать в представления ASCII. Я попытался проанализировать этот JSON файл и загрузить его как Python объект с библиотекой "json", сначала я сделал:
with open("test.json") as fp:
data = json.load(fp)
print(type(data))
print(data[0])
# output:
# <class 'list'>
# {'timestamp': 1575826804, 'attachments': [], 'data': [{'post': 'This is a test line with
# character Ã\xad and ó'}, {'update_timestamp': 1575826804}], 'title': 'My Name'}
Хотя я получаю объект списка из json .load (), акцентированные символы неправильны: «Ã \ xad» и «Ã³». Затем я сделал:
with open("test.json", encoding='unicode-escape') as fp:
txt = fp.read().encode('latin1').decode('utf8')
data = json.loads(txt)
print(type(data))
print(data[2])
Эта вторая попытка будет работать только в том случае, если строка json не содержит каких-либо символов новой строки "\ n" или ":" в пределах значения JSON, но в в таких случаях, как мой, он выдаст:
JSONDecodeError: Invalid control character at: line 33 column 82 (char 560)
Символ 560 - это завершающий символ "\ n" внутри JSON значения "post":
{
"post": "This is another test line with character \u00c3\u00ad and \u00c3\u00b3 and line breaks\n"
}
Как правильно загрузить это JSON с юникодами? Является ли замена строк Юникода для символов ASCII единственным способом?
Заранее спасибо за помощь!