Задать вопрос
@Scorpiored88

Как корректно читать json файл?

Всем доброго!
В питоне я новичок,а в гугле, как то не получилось найти подходящий мне вариант,поэтому не судите строго,а если можете подскажите пожалуйста :)

И так, есть у меня user_config.json файл,выглядит он так :

{
  "userId" : "0001",
  "userName": "user"
}


Пытаюсь открыть и прочитать его питоном :

config =  open(os.path.join(os.path.dirname(__file__), 'user_config.json'), 'r')
confid_data = json.load(config)
print confid_data
config.close()


вот результат :
{u'userId': u'0001', u'userName': u'user'}

Как мне убрать ети u' чтобы я мог нормально получить доступ к переменной используя ключ :
confid_data.userId или confid_data.userName ?
  • Вопрос задан
  • 1677 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@deliro
Всё правильно.
u - это обозначение, что строка в Юникоде. Ты юзаешь 2-ую версию питона, там есть разница. В третьей версии все строки в Юникоде, так что, символа u там нет.

Как мне убрать ети u' чтобы я мог нормально получить доступ к переменной используя ключ :
confid_data.userId или confid_data.userName ?

Ты считываешь словарь, а доступ к элементам словаря осуществляется оператором [] или методом get.
confid_data['userId'] - кинет KeyError эксепшен, если такого ключа нет
confid_data.get('userId') - кинет None (либо то, что ты передашь вторым аргументом в метод), если ключа нет.

Почему confid_data?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
L1Qu0R
@L1Qu0R
Веб разработчик
используйте вместо json.load json.loads
Ответ написан
sim3x
@sim3x
import os
import json

config = {}
with open('user_config.json', 'r', encoding="utf-8") as cf:
    config = json.loads(cf.read())


print(config)  # {u'userName': u'user', u'userId': u'0001'}


print(config.get("userName"))  # user
print(config.get("userName1"))  # None

# но намного лучше использовать неизменяемую структуру данних
# namedtuple
from collections import namedtuple


with open('user_config.json', 'r', encoding="utf-8") as cf:
    config = json.loads(cf.read(), 
         object_hook=lambda d: namedtuple('CONFIG', d.keys())(*d.values()))


print(config.userName, config.userId)


stackoverflow.com/questions/6578986/how-to-convert...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы