1

I'm trying to select a specific key in this code which is the 163, 203 & 13. Basically, each time, my function runs, I'll have one of these 3 codes stock in a variable and I can't figure out how to parse a specific element in a Json file. I'd like to make a loop who stops for example at the key '203' and return me the result of it.

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'

Here's the JSON. The JSON is divided in 3 parts, each part starts with a random key, that I don't know and, if you look on the JSON, after the payload, there is the price and then the id (e.g. '203'). I need to get the value of this id.

{
  "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
    }
  }
}
4
  • can you please elaborate the question? can the key be present at any level in the json tree? And what exactly is that you need to be printed? Commented Dec 28, 2017 at 13:31
  • I edited, the question, is my question question clearer? Commented Dec 28, 2017 at 13:39
  • There is another key right under price, you'll have to get this one as well Commented Dec 28, 2017 at 13:42
  • Yes the key right under price, is the key I have in a variable before parsing the code and I need to get the value of this key. Commented Dec 28, 2017 at 13:44

3 Answers 3

1

What's wrong with checking the id it its exists before accessing it.

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'
Sign up to request clarification or add additional context in comments.

Comments

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'])

This is what I could make out from your question. Comment below if that wasn't what was intended.

1 Comment

Thank you also! The only issue here is the "==", it should be "if id in value[..] But thank you guys !
0

I tried flattening the JSON object so all the keys sit at the same level.

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)

Does this get you in the right direction?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.