Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python 2.7 парсинг JSON / 10 сообщений из 10, страница 1 из 1
07.07.2018, 08:42
    #39670957
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
В ответ на зарпрос получаю джейсон примерно такой структуры

автор{u'count': 9306, u'offers': [{u'payout': u'0.40', u'languages_allowed': [{u'code': u'All', u'name': u'All Allowed If Not Blocked'}], u'tracking_link': u' http://crystal ads.afftrack.com/click?aid=110&linkid=B12157', u'terms': u'', u'description': u'Download, start the app and register\r\nKPI: add card >30%', u'countries': [{u'code': u 'UA', u'name': u'Ukraine'}], u'traffic_types': [u'Mobile Placements'], u'preview_link': u'https://play.google.com/store/apps/details?id=com.ftband.mono', u'time_zone': u'Asia/Beirut', u'devices': [{u'minimum_version': u'4', u'device_type': u'Android 4+'}], u'converts_on': u'Mobile App Install and Launch', u'states': {u'name': u'any' , u'abbr': u'any'}], "others":"any_values"}


мне желательно вынкить отдельно count - цифру и offers виде листа или словаря
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
f = open('myfile.txt','w')
f.write(response.content)
toJson = response.content
f.close()


jsonList = json.loads(toJson["offers"])

print jsonList



запускаю на сервере

получаю ощибку


автор jsonList = json.loads(toJson["offers"])
TypeError: string indices must be integers, not str


как надо правельою В процессе перехода на питон так что сильно не пинайте
...
Рейтинг: 0 / 0
07.07.2018, 09:03
    #39670961
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
Вангую, должно быть
Код: python
1.
jsonList = json.loads(toJson)["offers"]


Потому что toJson -- строка, о чем Питон и говорит.
...
Рейтинг: 0 / 0
07.07.2018, 10:13
    #39670972
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
а как распарсить её в лист или словарь?
...
Рейтинг: 0 / 0
07.07.2018, 10:15
    #39670973
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
а понял. сейчас попробую
...
Рейтинг: 0 / 0
07.07.2018, 14:11
    #39671003
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
Alexander A. SakВангую, должно быть
Код: python
1.
jsonList = json.loads(toJson)["offers"]


Потому что toJson -- строка, о чем Питон и говорит.

попробывалю получил джейсок информациией о поставщикахю
пробую распарсить его:
Код: python
1.
2.
3.
jsonList = json.loads(toJson)["offers"]

offersList = json.loads(jsonList)

;

получаю ответ:
авторTraceback (most recent call last):
File "request.py", line 19, in <module>
offersList = json.loads(jsonList);
File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer


что опять не так?
...
Рейтинг: 0 / 0
07.07.2018, 14:16
    #39671005
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
Оказывается можно на прямую jsonList[0] !!

Нодо к новому языку привыкать ))
...
Рейтинг: 0 / 0
07.07.2018, 14:21
    #39671007
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
AreostarОказывается можно на прямую jsonList[0] !!

Нодо к новому языку привыкать ))В PHP же также
...
Рейтинг: 0 / 0
07.07.2018, 14:40
    #39671014
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
skyANA,

Ну не совсемю там более тапорно. различие мелкие но я на них постоянно вспотыкаюсь ((

во в одном из пунктов списка сейчас содержится маленький джейсон [{u'code': u'All', u'name': u'All Allowed If Not Blocked'}]

пытаюсь получать токо code. offersList[0]["languages_allowed"]["code"] не катит

json.loads(offersList[0]["languages_allowed"])["code"] - тоже, пишет
авторFile "request.py", line 21, in <module>
print json.loads(offersList[0]["languages_allowed"])["name"]
File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer

А в чем тут разница с offersList = json.loads(toJson)["offers"] ??
...
Рейтинг: 0 / 0
07.07.2018, 14:59
    #39671019
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
Areostar,

json.loads десериализует строку в объект.

Надеюсь слова десериализует, строка, объект Вам понятны?

toJson - это тупо строка response.content у Вас
json.loads(toJson) - десериализованный из строки объект
json.loads(toJson)["offers"] - свойство offers данного объекта, что представляет из себя массив

к элементу массива, что в PHP, что в Python можно обратиться по индексу
каждый элемент из массива offers представляет собой объект, у которого есть свойство languages_allowed , что также содержит массив

из всего этого следует, что до code добраться можно так:
Код: python
1.
2.
3.
4.
5.
6.
7.
wholeObject = json.loads(toJson)
arrayOfOffers = wholeObject["offers"]
firstOffer = arrayOfOffers[0]
arrayOfLanguages = firstOffer["languages_allowed"]
firstAllowedLanguage = arrayOfLanguages[0]

languageCode = firstAllowedLanguage["code"]


а Вы пытаетесь зачем-то десериализовать уже десериализованный объект

P.S.: я на Python вообще не пишу, пару лаб раз в жизни сделал
...
Рейтинг: 0 / 0
07.07.2018, 15:24
    #39671032
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python 2.7 парсинг JSON
skyANA,

Спасиюо за обьяснение
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python 2.7 парсинг JSON / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]