xiholac761
xiholac761

Reputation: 51

JSON Parse an element inside an element in Python

I have a JSON text grabbed from an API of a website:

{"result":"true","product":{"made":{"Taiwan":"Taipei","HongKong":"KongStore","Area":"Asia"}}}

I want to capture "Taiwan" and "Taipei" but always fail.

Here is my code:

import json
weather = urllib2.urlopen('url')
wjson = weather.read()
wjdata = json.loads(wjson)
print wjdata['product']['made'][0]['Taiwan']

I always get the following error: Keyword 0 error

Whats the correct way to parse that json?

Upvotes: 0

Views: 103

Answers (2)

gitsieg
gitsieg

Reputation: 23

You are indexing an array where there are none. The JSON is the following:

{ 
    "result":"true",
    "product": {
        "made": {
            "Taiwan":"Taipei",
            "HongKong":"KongStore",
            "Area":"Asia"
        }
    }
}

And the above contains no arrays.

You are assuming the JSON structure to be something like this:

{ 
    "result":"true",
    "product": {
        "made": [
            {"Taiwan":"Taipei"},
            {"HongKong":"KongStore"},
            {"Area":"Asia"}

        ]            
    }
}

From a brief look at the doc pages for the json package, I found this conversion table: Conversion table using json.loads

It tells us that a JSON object translates to a dict. And a dict has a method called keys, which returns a list of the keys.

I suggest you try something like this:

#... omitted code
objectKeys = wjdata['product']['made'].keys()

# You should now have a list of the keys stored in objectKeys.
for key in objectKeys:
    print key
    if key == 'Taiwan':
        print 'Eureka'

I haven't tested the above code, but I think you get the gist here :)

Upvotes: 1

rossi
rossi

Reputation: 314

wjdata['product']['made']['Taiwan'] works

Upvotes: 0

Related Questions