2014-10-24 2 views
0

파이썬 2.6.6정말 간단하게 JSON 파싱

나는 GET 요청을하고 JSON 객체의 배열을 건네 준다.

{ 
    "data": [ 
    { 
     "amount": 59, 
     "amount_refunded": 0, 
     "balance_transaction": " XXXXXXXXXXXXx", 
     "captured": true, 
     "card": { 
     "address_line1_check": "fail", 
     "address_line2": null, 
     "address_zip_check": "fail", 
     "brand": "MasterCard", 
     "customer": null, 
     "cvc_check": null, 
     "dynamic_last4": null, 
     "exp_month": 8, 
     "exp_year": 2016, 
     "fingerprint": "XXXXXXXXXXXXXX", 
     "funding": "prepaid", 
     "id": "XXXXXXXXXXXXXXXXXXXXX", 
     "last4": "1111", 
     "object": "card", 
     "type": "MasterCard" 
     }, 
     "created": 11111111111111, 
     "currency": "gbp", 
     "customer": null, 
     "dispute": null, 
     "failure_code": null, 
     "failure_message": null, 
     "id": "ch_56Lce", 
     "invoice": null, 
     "livemode": true, 
     "metadata": {}, 
     "object": "charge", 
     "paid": true, 
     "receipt_email": null, 
     "receipt_number": null, 
     "refunded": false, 
     "refunds": [], 
     "shipping": null, 
     "statement_description": null 
    }, 
    { 
     "amount": 9, 
     "amount_refunded": 0, 
     "balance_transaction": "XXXXXXXXXXXX", 
     "captured": true, 
     "card": { 
     "address_line1_check": "fail", 
     "address_line2": null, 
     "address_zip_check": "fail", 
     "brand": "MasterCard", 
     "country": "BZ", 
     "customer": null, 
     "cvc_check": null, 
     "dynamic_last4": null, 
     "exp_month": 1, 
     "exp_year": 2016, 
     "fingerprint": "XXXXXXXXXXXXXXXXXXXX", 
     "funding": "prepaid", 
     "id": "XXXXXXXXXXXXXXXXX", 
     "last4": "1111", 
     "object": "card", 
     "type": "MasterCard" 
     }, 
     "created": 11111111111111111111111111, 
     "currency": "gbp", 
     "customer": null, 
     "dispute": null, 
     "failure_code": null, 
     "failure_message": null, 
     "id": "xxxxxxxxxxxxxxxX", 
     "invoice": null, 
     "livemode": true, 
     "metadata": {}, 
     "object": "charge", 
     "paid": true, 
     "receipt_email": null, 
     "receipt_number": null, 
     "refunded": false, 
     "refunds": [], 
     "shipping": null, 
     "statement_description": null 
    }, 
    { 
     "amount": 9, 
     "amount_refunded": 0, 
     "balance_transaction": "XXXXXXXXXXXXXXXXXXXXXXXXX", 
     "captured": true, 
     "card": { 
     "address_line2": null, 
     "address_zip_check": "pass", 
     "brand": "Visa", 
     "country": "US", 
     "customer": null, 
     "cvc_check": "pass", 
     "dynamic_last4": null, 
     "exp_month": 1, 
     "exp_year": 2218, 
     "fingerprint": "XXXXXXXXXXXXXXXXXXXXXXX", 
     "funding": "debit", 
     "id": "GGGGGGGGGGGGGGGGGGGG", 
     "object": "card", 
     "type": "Visa" 
     }, 
     "created": 1111111111111111111, 
     "currency": "usd", 
     "customer": null, 
     "dispute": null, 
     "failure_code": null, 
     "failure_message": null, 
     "id": "SXXXXXXXXXXXXXXXXXXXXX", 
     "invoice": null, 
     "livemode": true, 
     "metadata": {}, 
     "object": "charge", 
     "paid": true, 
     "receipt_email": null, 
     "receipt_number": null, 
     "refunded": false, 
     "refunds": [], 
     "shipping": null, 
     "statement_description": null 
    }, 
    { 
     "amount": 9, 
     "amount_refunded": 0, 
     "balance_transaction": null, 
     "captured": false, 
     "card": { 
     "address_zip_check": "unchecked", 
     "brand": "Visa", 
     "country": "US", 
     "customer": null, 
     "cvc_check": null, 
     "dynamic_last4": null, 
     "exp_month": 7, 
     "exp_year": 2089, 
     "fingerprint": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", 
     "funding": "debit", 
     "id": "XXXXXXXXXXXXXXX", 
     "last4": "11111", 
     "object": "card", 
     "type": "Visa" 
     }, 
     "created": 111111111111111, 
     "currency": "usd", 
     "customer": null, 
     "dispute": null, 
     "failure_code": "card_declined", 
     "failure_message": "Your card was declined.", 
     "id": "XXXXXXXXXXXXXXXXXXXXXXXX", 
     "invoice": null, 
     "livemode": true, 
     "metadata": {}, 
     "object": "charge", 
     "paid": false, 
     "receipt_email": null, 
     "receipt_number": null, 
     "refunded": false, 
     "refunds": [], 
     "shipping": null, 
     "statement_description": null 
    }, 
    { 
     "amount": 9, 
     "amount_refunded": 0, 
     "balance_transaction": null, 
     "captured": false, 
     "card": { 
     "address_zip_check": "fail", 
     "brand": "Visa", 
     "country": "US", 
     "customer": null, 
     "cvc_check": null, 
     "dynamic_last4": null, 
     "exp_month": 5, 
     "exp_year": 2222, 
     "fingerprint": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
     "funding": "debit", 
     "id": "XXXXXXXXXXXXXXXXX", 
     "last4": "1111", 
     "object": "card", 
     "type": "Visa" 
     }, 
     "created": 11111111111111111, 
     "currency": "usd", 
     "customer": null,  
     "dispute": null, 
     "failure_code": "card_declined", 
     "failure_message": "Your card was declined.", 
     "id": "XXXXXXXXXXXXXXXXXXXX", 
     "invoice": null, 
     "livemode": true, 
     "metadata": {}, 
     "object": "charge", 
     "paid": false, 
     "receipt_email": null, 
     "receipt_number": null, 
     "refunded": false, 
     "refunds": [], 
     "shipping": null, 
     "statement_description": null 
    } 
    ], 
    "has_more": true, 
    "object": "list", 
    "url": "/v1/charges" 
} 

내가 배열의 각 항목을 반복하고 항목의 객체card.object 속성 값을 표시 할 예를 들면 다음과 같습니다이다. 내 모든 시도에 행운이 없다. 여기 하나 :

charges = s.Charge.all(limit=5) 
    for key, value in charges.iteritems(): 
    #print value.data['object'] 
    #print value.data.card['object'] 
    # Above doesn't work, let's try this: 
    print value.data.object 
    print value.data.card.object  
    # or this 
    print key.data.object 
    print key.data.card.object 
    print("done") 

이것은 당황 스럽다. 도와주세요!

+0

어떤 에러가 있나요? 너 지금 json을 어떻게 파싱하는거야? –

+0

당신은'import json'을 고려 했습니까? – inspectorG4dget

답변

1

점과 괄호 조회를 조합하여 사용하는 이유가 확실하지 않습니다. 중첩 된 사전입니다. 점 표기법은 여기에 할 일이 없습니다. 그러나 시도하지 않은 한 가지는 대괄호 표기법을 사용하는 것입니다.

data = charge['data'] 
for item in data: # data is a list of dictionaries 
    card = item['card'] 
    object = card['object'] 
    ... etc ... 
+0

또 다른 훌륭한 솔루션입니다. 이것은 내가 뭘 잘못하고 있는지 설명합니다. 감사. –

1

charges.iteritems()이 아마도 당신이 나와 바깥 쪽 사전 인 키와 전하의 값을 반복한다 :이 Blob은 하나의 충전 객체의 전체이라고 가정

는 다음을 수행 할 수 있습니다 너의 본보기. 그렇다면 "데이터", "has_more", "객체"및 "url"키를 반복합니다. "데이터"는 해당 값으로 목록이 있으며 사전이 아니므로 iteritems()은 적용 할 수 없습니다.

목록 [ "데이터"]를 반복해야합니다. 이 목록에있는 각 항목은 사전이며 "개체"및 "카드"키가 있습니다. 이 같은 것을 시도하십시오

charges = s.Charge.all(limit=5) 
for value in charges["data"]: 
    print value["object"] 
    print value["card"]["object"]