2015-02-12 2 views
0

Я продолжаю царапать себе голову, почему он не печатает содержимое json, в котором я нуждаюсь. Кто-нибудь знает, что я делаю неправильно?Python print json данные из запросов

Это словарь

> "listinginfo": { 
>  "438309609514180554": { 
>  "listingid": "438309609514180554", 
>  "price": 35, 
>  "fee": 4, 
>  "publisher_fee_app": 730, 
>  "publisher_fee_percent": "0.10000000149011612", 
>  "currencyid": "2003", 
>  "steam_fee": 1, 
>  "publisher_fee": 3, 
>  "converted_price": 50, 
>  "converted_fee": 7, 
>  "converted_currencyid": "2020", 
>  "converted_steam_fee": 2, 
>  "converted_publisher_fee": 5, 
>  "converted_price_per_unit": 50, 
>  "converted_fee_per_unit": 7, 
>  "converted_steam_fee_per_unit": 2, 
>  "converted_publisher_fee_per_unit": 5, 
>  "asset": { 
>   "currency": 0, 
>   "appid": 730, 
>   "contextid": "2", 
>   "id": "1579403640", 
>   "amount": "1", 
>   "market_actions": [ 
>   { 

код + мне нужны значения для ключей, которые я хочу, чтобы напечатать:

while 1: 
    r = requests.get(url, headers=headers) 
    listingInfoStr = r.content 
    result= ujson.loads(listingInfoStr) 
    listingInfoJson= result['listinginfo'] 
    for listingdata in listingInfoJson: 
     print listingdata.get('listingId') 
     print listingdata.get('subTotal') 
     print listingdata.get('feeAmount') 
     print listingdata.get('totalPrice') 
    time.sleep(10) 

Благодарим Вас за Ваше время.

+0

Причина listingInfoJson не повторяется? это просто диктатор – pmod

ответ

0

Я побежал ваш код и он выглядит как listingInfoJson возвращается в Словаре не список. Поэтому, когда вы перебираете его, он просто дергает ключи.

Вы вызываете метод .get в объекте unicode, который даст вам атрибут AttributeError. Вы можете запустить этот код, чтобы различными способами:

for listingdata in listingInfoJson: 
    print listingInfoJson[listingdata].get('listingid') 
    print listingInfoJson[listingdata].get('subTotal') 
    print listingInfoJson[listingdata].get('feeAmount') 
    print listingInfoJson[listingdata].get('totalPrice') 

или лучший способ (отредактированный для комментариев):

if listingInfoJson: 
    for key, value in listingInfoJson.iteritems(): 
     print value.get('listingid') 
     print value.get('subTotal') 
     print value.get('feeAmount') 
     print value.get('totalPrice') 
else: 
    print "listingInfoJson is empty" 

Я бы также проверить ваши ключевые ценности, listingId должны быть listingid

+0

Спасибо, сработало! я предпочитаю «data.iteritems()», как вы только что показали мне, я собираюсь изучить это больше, еще раз спасибо. –

+0

Добро пожаловать. –

+0

Требуется спросить вас, в настоящее время оператор «для» печатает значения, можно ли добавить инструкцию «else» + напечатать «нет ключа/значения найдено», если нет ключа, значение? –

2

Вы можете использовать requests.Response.json метод, чтобы получить разобранный JSON:

r = requests.get(url, headers=headers) 
listingInfoJson = r.json()['listinginfo'] 
+0

, обратите внимание, что 'listingInfoJson' будет фактически питоном Python, а не строкой JSON. – MattDMo

+0

Я не хочу использовать какой-либо другой парсер json, кроме ujson, извините. –

Смежные вопросы