Подтвердить что ты не робот

Преобразовать строку json в объект python

Можно ли преобразовать строку json (например, возвращаемую из службы поиска jitter twitter) в простые строковые объекты. Вот небольшое представление данных, возвращаемых из службы json:

{
results:[...],
"max_id":1346534,
"since_id":0,
"refresh_url":"?since_id=26202877001&q=twitter",
.
.
.
}

Предположим, что я каким-то образом сохраняю результат в некоторой переменной, например obj. Я хочу получить соответствующие значения, например:

print obj.max_id
print obj.since_id

Я пробовал использовать simplejson.load() и json.load(), но он дал мне сообщение об ошибке 'str' object has no attribute 'read'

4b9b3361

Ответ 1

Я пробовал использовать simplejson.load() и json.load(), но он дал мне сообщение об ошибке 'str' object has no attribute 'read'

Чтобы загрузить из строки, используйте json.loads() (обратите внимание на 's').

Более эффективно, пропустите шаг чтения ответа в строку и просто передайте ответ json.load().

Ответ 2

если вы не знаете, будут ли данные файлом или строкой.... используйте

import StringIO as io
youMagicData={
results:[...],
"max_id":1346534,
"since_id":0,
"refresh_url":"?since_id=26202877001&q=twitter",
.
.
.
}

magicJsonData=json.loads(io.StringIO(str(youMagicData)))#this is where you need to fix
print magicJsonData
#viewing fron the center out...
#youMagicData{}>str()>fileObject>json.loads
#json.loads(io.StringIO(str(youMagicData))) works really fast in my program and it would work here so stop wasting both our reputation here and stop down voting because you have to read this twice 

из https://docs.python.org/3/library/io.html#text-i-o

json.loads из встроенных библиотек python, json.loads требует файл-объект и не проверяет, что он передал, поэтому он все еще вызывает функцию чтения на том, что вы передали, потому что файл-объект только выдает данные при вызове читать(). Поэтому, поскольку встроенный класс строк не имеет функции чтения, нам нужна оболочка. Таким образом, функция StringIO.StringIO вкратце, подклассы класс строки и класс файла и зацепление внутренней обработки слышит мою небольшую детализацию rebaild https://gist.github.com/fenderrex/843d25ff5b0970d7e90e6c1d7e4a06b1 так что в конце всего, что это похоже на запись файла ram и его обсуждение в одной строке....

Ответ 3

magicJsonData=json.loads(io.StringIO((youMagicData).decode("utf-8"))
print(magicJsonData)

Строка json от любого запроса или http-сервера имеет тип байтового массива чтобы преобразовать их в строку, (так как вопрос касается байтового массива, возвращаемого из запроса сервера, правильно?)

res = json.loads((response.content).decode("utf-8") )
print(res)

здесь response.content может быть байтовым массивом или любой возвращаемой строкой из запроса сервера, которая декодируется в формате string (utf-8) и возвращается как массив python.

Или просто используйте bytearray, но используйте json.load вместо json.loads