@Timebird

Как перевести JSON в PythonObj без кракозябр?

Имеется функция:

def load_data(filepath):

    data = []
    with open(filepath) as f:
        for line in f:
            data.append(json.loads(line)) #convert JSON to Python object
    print(data)
    return data

Она загружает данные с файла JSON.
И она работает, но вывод на печать примерно такой:
{u'type': u'Point', u'coordinates': [37.717115000077776, 55.78262800012168]}, u'SocialPrivileges': u'\u043d\u0435\u0442', u'AdmArea': u'\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u043a\u0440\u0443\u0433', u'SeatsCount': 177}, u'Id': u'4644e029-30f7-4e9c-8a1e-1ec20595f564', u'Number': 515}]]


Куда тут запихнуть параметры ensure_ascii=False, sort_keys=True, indent=4?
  • Вопрос задан
  • 522 просмотра
Решения вопроса 1
@BogBel
import json
with open(file_path) as file:
   data = json.load(file)

Не знаю ответ ли это на Ваш вопрос, но когда есть задача читать валидный JSON из файла, пользуйтесь json.load.

json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)¶
Deserialize fp (a .read()-supporting file-like object containing a JSON document) to a Python object using this conversion table.

Взято из доки

Обычно эти параметры(ensure_ascii, sort_keys, indent) используют для красивой записи в json файл через json.dumps()
Если же вам надо красиво напечатать PythonObject в консоль, то советую обратить внимание на
pprint
from pprint import pprint
data = {'key1': 'value1', 'key2': {'key2.1': 'value2.1', 'key2.2': {'key2.2.1': 'value2.2.1', 'key2.2.2': 'value2.2.2'}, 'key2.3': 'value2.3'}, 'key3': 'value3'}
>>> pprint(data)
{'key1': 'value1',
 'key2': {'key2.1': 'value2.1',
          'key2.2': {'key2.2.1': 'value2.2.1', 'key2.2.2': 'value2.2.2'},
          'key2.3': 'value2.3'},
 'key3': 'value3'}


P.S скорее всего проблема в открытии файла , попробуйте передать в open дополнительный параметр encoding
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@adv-tsk
Full Stack Web Developer
Он у Вас и так преобразуется нормально. Вывести на экран без использования json.dumps можно вот так.
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Dmitry Azarenko привел отличный вариант.
Ещё можно задампить d json с указанными вами параметрами то, что вы печатаете и напечатаь результат дампа, а не repr
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы