Bruno Villanova
Bruno Villanova

Reputation: 1361

Getting values from JSON using Python

While I am trying to retrieve values from JSON string, it gives me an error:

data = json.loads('{"lat":444, "lon":555}')
return data["lat"]

But, if I iterate over the data, it gives me the elements (lat and lon), but not the values:

data = json.loads('{"lat":444, "lon":555}')
ret = ''
for j in data:
    ret = ret + ' ' + j
return ret

Which returns: lat lon

What do I need to do to get the values of lat and lon? (444 and 555)

Upvotes: 122

Views: 712385

Answers (6)

cottontail
cottontail

Reputation: 23021

With a JSON string such as '{"lat":444, "lon":555}', json.loads() creates a dictionary, so to get its values, you do so as you would get the values in a dictionary. Iteration over a dictionary is an iteration over its keys (for j in data: is the same as for j in data.keys():); however, to iterate over its values, you need to use .values():

import json
data = json.loads('{"lat":444, "lon":555}')
print(type(data))           # <class 'dict'>
print(data)                 # {'lat': 444, 'lon': 555}

for j in data.values():     # <--- iterate over values
    pass

Note that json.loads converts json arrays into lists. If you need to get a value of a dictionary in a list, then you will need to index the list for the dictionary first to get the value. This is an easy mistake to make especially if an API returns a JSON array with a single object in it. For example:

s = '[{"lat":444, "lon":555}]'
data = json.loads(s)            # [{'lat': 444, 'lon': 555}]

data['lat']                     # <--- TypeError
data[0]['lat']                  # <--- OK

If you want to get values from a JSON document, then open the file first and pass the file handle to json.load() instead. Depending on the document structure, json.load() would return dictionary or list, just like json.loads().

import json

with open('data.json', 'r') as f:
    data = json.load(f)

for j in data.values():
    pass

Upvotes: 0

asu
asu

Reputation: 569

There's a Py library that has a module that facilitates access to Json-like dictionary key-values as attributes: pyxtension and Github source code

You can use it as:

j = Json('{"lat":444, "lon":555}')
j.lat + ' ' + j.lon

Upvotes: 6

Sireesh Yarlagadda
Sireesh Yarlagadda

Reputation: 13716

Using Python to extract a value from the provided Json

Working sample:

import json
import sys

# load the data into an element
data = {"test1": "1", "test2": "2", "test3": "3"}

# dumps the json object into an element
json_str = json.dumps(data)

# load the json to a string
resp = json.loads(json_str)

# print the resp
print(resp)

# extract an element in the response
print(resp['test1'])

Upvotes: 24

Lior
Lior

Reputation: 2631

If you want to iterate over both keys and values of the dictionary, do this:

for key, value in data.items():
    print(key, value)

Upvotes: 142

Destreyf
Destreyf

Reputation: 461

Using your code, this is how I would do it. I know an answer was chosen, just giving additional options.

data = json.loads('{"lat":444, "lon":555}')
    ret = ''
    for j in data:
        ret = ret+" "+data[j]
return ret

When you use "for" in this manner you get the key of the object, not the value, so you can get the value by using the key as an index.

Upvotes: 7

Pablo Santa Cruz
Pablo Santa Cruz

Reputation: 181270

What error is it giving you?

If you do exactly this:

data = json.loads('{"lat":444, "lon":555}')

Then:

data['lat']

SHOULD NOT give you any error at all.

Upvotes: 98

Related Questions