как написать и прочитать Unicode в json файл в python - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь сохранить тип словаря моих данных в файле json в текстовом файле, используя python3.
Пример формы моих данных, например:

listdic = []
dic1 = {"id": 11106, "text": "*Kỹ_năng đàm_phán* , thuyết_phục"}
dic2 = {"id": 11104, "text": "*Ngoại_hình ưa_nhìn* , nhanh_nhẹn , giao_tiếp tốt"}
dic3 = {"id": 10263, "text": "giao_tiếp tốt"}

listdic.append(dic1)
listdic.append(dic2)
listdic.append(dic3)

enter image description here

И я хочу, чтобы он был сохранен в моем json файле, например:

enter image description here

i прочитал какое-то решение на inte rnet, и я попытался:

f = open("job_benefits.json", "a", encoding= 'utf-8')

for i in listdic:
    i = json.dumps(i)
    f.write(i + '\n')
f.close()

, но у меня получился такой результат:

enter image description here

а затем я пытаюсь прочитать файл, и это мой результат:

f = open("job_benefits.json", "r", encoding= 'utf-8')

listdic = f.readlines()
for i in listdic:
    print(i)

enter image description here

Это не так, чтобы записать и прочитать данные в json файл, который я хочу, и какое-то тело может помочь раскрыть это дело ??
Спасибо, очень грязно и извините за мою грамматику!

1 Ответ

0 голосов
/ 19 апреля 2020

Вы сохраняете файл с помощью модуля json и читаете его обратно как текст, а не пытаетесь декодировать прочитанные данные json. Таким образом, все символы, закодированные с помощью escape-кодирования для предотвращения потери информации, остаются с кодировкой escape-кода.

Вы можете заставить json отключить кодировку utf-8, вместо автоматического удаления всех символов, не входящих в ASCII, путем передачи dumps или dump аргумент ensure_ascii=False:

f = open("job_benefits.json", "a", encoding= 'utf-8')

for i in listdic:
    i = json.dumps(i, ensure_ascii=False)
    f.write(i + '\n')
f.close()

или декодирование с JSON после того, как вы прочитали свои строки назад:

import json 

f = open("job_benefits.json", "r", encoding= 'utf-8')

listdic = f.readlines()
for i in listdic:
    print(json.loads(i))
...