2017-12-28 10 views
0

Ich versuche, einen bestimmten Schlüssel in diesem Code, der die 163 ist, 203 & 13. Grundsätzlich jedes Mal, meine Funktion läuft, werde ich eine dieser 3 haben Codes Lager in einer Variablen und ich kann nicht herausfinden, wie ein bestimmtes Element in einer JSON-Datei analysieren. Ich würde gerne eine Schleife machen, die zum Beispiel bei der Taste 203 stoppt und mir das Ergebnis zurückgibt.Parse JSON und wählen Sie einen bestimmten Schlüssel in Python

with open('data.json') as data_file: 
    data = json.load(data_file, object_pairs_hook=OrderedDict) 
    for key, value in data.items(): 
     id = '203' 
     id_value = value['payload']['price'] 
     pack = id_value[id] 
     print(pack) #pack should be returning the value of the key '203' 

Hier ist der JSON. Der JSON ist in 3 Teile unterteilt, jeder Teil beginnt mit einem zufälligen Schlüssel, den ich nicht kenne, und wenn Sie auf den JSON schauen, gibt es nach der Nutzlast den Preis und dann die ID (z.B. '203'). Ich muss den Wert dieser ID erhalten.

{ 
    "a506b5686": { 
    "status": { 
     "message": "Ok", 
     "code": 0, 
     "user": { 
     "isBanned": false, 
     "isNotConfirmed": false 
     } 
    }, 
    "payload": { 
     "vat": 0, 
     "price": { 
     "163": { 
      "100": { 
      "country_id": "CN", 
      "product_price": 16.54, 
      "shipment_price": 2.31, 
      "quantity": 100, 
      "batchsize_id": 60348 
      }, 
      "200": { 
      "country_id": "CN", 
      "product_price": 23.17, 
      "shipment_price": 2.31, 
      "quantity": 200, 
      "batchsize_id": 60354 
      }, 
      "300": { 
      "country_id": "CN", 
      "product_price": 28.29, 
      "shipment_price": 2.31, 
      "quantity": 300, 
      "batchsize_id": 60360 
      }, 
      "400": { 
      "country_id": "CN", 
      "product_price": 34.11, 
      "shipment_price": 2.31, 
      "quantity": 400, 
      "batchsize_id": 60366 
      }, 
      "500": { 
      "country_id": "CN", 
      "product_price": 39.33, 
      "shipment_price": 2.31, 
      "quantity": 500, 
      "batchsize_id": 60372 
      }, 
      "600": { 
      "country_id": "CN", 
      "product_price": 44.04, 
      "shipment_price": 2.95, 
      "quantity": 600, 
      "batchsize_id": 60378 
      }, 
      "700": { 
      "country_id": "CN", 
      "product_price": 48.32, 
      "shipment_price": 2.95, 
      "quantity": 700, 
      "batchsize_id": 60384 
      }, 
      "800": { 
      "country_id": "CN", 
      "product_price": 52.22, 
      "shipment_price": 2.95, 
      "quantity": 800, 
      "batchsize_id": 60390 
      }, 
      "900": { 
      "country_id": "CN", 
      "product_price": 55.79, 
      "shipment_price": 2.95, 
      "quantity": 900, 
      "batchsize_id": 60396 
      }, 
      "1000": { 
      "country_id": "CN", 
      "product_price": 59.07, 
      "shipment_price": 2.95, 
      "quantity": 1000, 
      "batchsize_id": 60402 
      }, 
      "maxDeliveryDays": 6, 
      "minDeliveryDays": 4 
     } 
     }, 
     "maxDeliveryDays": 6, 
     "minDeliveryDays": 4, 
     "productionCountry": [ 
     "CN" 
     ] 
    }, 
    "pager": { 
     "total": null, 
     "current": 1, 
     "count": null 
    } 
    }, 
    "a28bb008b": { 
    "status": { 
     "message": "Ok", 
     "code": 0, 
     "user": { 
     "isBanned": false, 
     "isNotConfirmed": false 
     } 
    }, 
    "payload": { 
     "vat": 0, 
     "price": { 
     "203": { 
      "100": { 
      "country_id": "CN", 
      "product_price": 16.21, 
      "shipment_price": 2.31, 
      "quantity": 100, 
      "batchsize_id": 60972 
      }, 
      "200": { 
      "country_id": "CN", 
      "product_price": 22.58, 
      "shipment_price": 2.31, 
      "quantity": 200, 
      "batchsize_id": 60978 
      }, 
      "300": { 
      "country_id": "CN", 
      "product_price": 27.5, 
      "shipment_price": 2.31, 
      "quantity": 300, 
      "batchsize_id": 60984 
      }, 
      "400": { 
      "country_id": "CN", 
      "product_price": 33.11, 
      "shipment_price": 2.31, 
      "quantity": 400, 
      "batchsize_id": 60990 
      }, 
      "500": { 
      "country_id": "CN", 
      "product_price": 38.14, 
      "shipment_price": 2.31, 
      "quantity": 500, 
      "batchsize_id": 60996 
      }, 
      "600": { 
      "country_id": "CN", 
      "product_price": 42.69, 
      "shipment_price": 2.31, 
      "quantity": 600, 
      "batchsize_id": 61002 
      }, 
      "700": { 
      "country_id": "CN", 
      "product_price": 46.82, 
      "shipment_price": 2.95, 
      "quantity": 700, 
      "batchsize_id": 61008 
      }, 
      "800": { 
      "country_id": "CN", 
      "product_price": 50.58, 
      "shipment_price": 2.95, 
      "quantity": 800, 
      "batchsize_id": 61014 
      }, 
      "900": { 
      "country_id": "CN", 
      "product_price": 54.02, 
      "shipment_price": 2.95, 
      "quantity": 900, 
      "batchsize_id": 61020 
      }, 
      "1000": { 
      "country_id": "CN", 
      "product_price": 57.18, 
      "shipment_price": 2.95, 
      "quantity": 1000, 
      "batchsize_id": 61026 
      }, 
      "maxDeliveryDays": 6, 
      "minDeliveryDays": 4 
     } 
     }, 
     "maxDeliveryDays": 6, 
     "minDeliveryDays": 4, 
     "productionCountry": [ 
     "CN" 
     ] 
    }, 
    "pager": { 
     "total": null, 
     "current": 1, 
     "count": null 
    } 
    }, 
    "a2e2a89bf": { 
    "status": { 
     "message": "Ok", 
     "code": 0, 
     "user": { 
     "isBanned": false, 
     "isNotConfirmed": false 
     } 
    }, 
    "payload": { 
     "vat": 0, 
     "price": { 
     "13": { 
      "100": { 
      "country_id": "CN", 
      "product_price": 14.95, 
      "shipment_price": 2.31, 
      "quantity": 100, 
      "batchsize_id": 58240 
      }, 
      "200": { 
      "country_id": "CN", 
      "product_price": 20.37, 
      "shipment_price": 2.31, 
      "quantity": 200, 
      "batchsize_id": 58226 
      }, 
      "300": { 
      "country_id": "CN", 
      "product_price": 24.57, 
      "shipment_price": 2.31, 
      "quantity": 300, 
      "batchsize_id": 58237 
      }, 
      "400": { 
      "country_id": "CN", 
      "product_price": 29.41, 
      "shipment_price": 2.31, 
      "quantity": 400, 
      "batchsize_id": 58228 
      }, 
      "500": { 
      "country_id": "CN", 
      "product_price": 33.76, 
      "shipment_price": 2.31, 
      "quantity": 500, 
      "batchsize_id": 58234 
      }, 
      "600": { 
      "country_id": "CN", 
      "product_price": 37.69, 
      "shipment_price": 2.95, 
      "quantity": 600, 
      "batchsize_id": 58235 
      }, 
      "700": { 
      "country_id": "CN", 
      "product_price": 41.25, 
      "shipment_price": 2.95, 
      "quantity": 700, 
      "batchsize_id": 58264 
      }, 
      "800": { 
      "country_id": "CN", 
      "product_price": 44.5, 
      "shipment_price": 2.95, 
      "quantity": 800, 
      "batchsize_id": 58270 
      }, 
      "900": { 
      "country_id": "CN", 
      "product_price": 47.46, 
      "shipment_price": 2.95, 
      "quantity": 900, 
      "batchsize_id": 58239 
      }, 
      "1000": { 
      "country_id": "CN", 
      "product_price": 50.2, 
      "shipment_price": 2.95, 
      "quantity": 1000, 
      "batchsize_id": 58223 
      }, 
      "maxDeliveryDays": 6, 
      "minDeliveryDays": 4 
     } 
     }, 
     "maxDeliveryDays": 6, 
     "minDeliveryDays": 4, 
     "productionCountry": [ 
     "CN" 
     ] 
    }, 
    "pager": { 
     "total": null, 
     "current": 1, 
     "count": null 
    } 
    } 
} 
+0

können Sie bitte die Frage ausarbeiten? Kann der Schlüssel auf irgendeiner Ebene im JSON-Baum vorhanden sein? Und was genau soll gedruckt werden? – nkprince007

+0

Ich habe die Frage bearbeitet, ist meine Frage klarer? – KenJ

+0

Es gibt einen anderen Schlüssel rechts unter dem Preis, Sie müssen auch einen bekommen –

Antwort

0

Was ist los mit der Überprüfung der ID es existiert vor dem Zugriff.

import json 
from collections import OrderedDict 

id = '203' 

with open('data,json') as data_file: 
    data = json.load(data_file, object_pairs_hook=OrderedDict) 
    for key, value in data.items(): 
     id_value = value['payload']['price'] 
     if id in id_value: # check first if id is present 
      pack = id_value[id] 
      print(pack) #pack should be returning the value of the key '203' 
0
with open('data.json') as data_file: 
    data = json.load(data_file, object_pairs_hook=OrderedDict) 
    for key, value in data.items(): 
     id = '203' 
     if value['payload']['price'] == id: 
      print(value['payload']['price']) 

Das ist, was ich von Ihrer Frage stellen könnte. Kommentar unten, wenn das nicht beabsichtigt war.

+0

Danke auch! Das einzige Problem hier ist das "==", sollte es sein "wenn ID in Wert [..] Aber danke Jungs! – KenJ

0

Ich habe versucht, das JSON-Objekt zu verflachen, so dass alle Schlüssel auf derselben Ebene sitzen.

import json 
from pandas.io.json import json_normalize 
from collections import OrderedDict 

with open('data.json') as data_file: 
data = json.load(data_file, object_pairs_hook=OrderedDict) 
data=json_normalize(data) 
id='163' 
for key, value in data.items(): 
    nested_ids = key.split('.') 
    if (id in nested_ids): 
     print(value) 

Geht das in die richtige Richtung?

+0

Es funktioniert auch! Vielen Dank! – KenJ

Verwandte Themen