tezzaaa
tezzaaa

Reputation: 469

extract values from json format list

I have a list with json data as below:

txt

["{'type': 'Point', 'coordinates': [35.51635659, 139.5662442]}", "{'type': 'Point', 'coordinates': [51.50178423, -0.05362636]}"]

I'm trying to extract the long and lat from coordinates but i'm really struggling with this.

When I try:

for each in txt:
    print(each)

it returns:

{'type': 'Point', 'coordinates': [35.51635659, 139.5662442]} {'type': 'Point', 'coordinates': [51.50178423, -0.05362636]}

when i try:

json_normalize(json.loads(txt))

I get the following error:


TypeError Traceback (most recent call last) in ----> 1 json_normalize(json.loads(txt))

C:\ProgramData\Anaconda3\lib\json__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 339 else: 340 if not isinstance(s, (bytes, bytearray)): --> 341 raise TypeError(f'the JSON object must be str, bytes or bytearray, ' 342 f'not {s.class.name}') 343 s = s.decode(detect_encoding(s), 'surrogatepass')

TypeError: the JSON object must be str, bytes or bytearray, not list

If anyone could help it would be much appreciated

Thank you

Upvotes: 0

Views: 256

Answers (1)

chitown88
chitown88

Reputation: 28565

The dictionary is a string, so you'd need to either use ast.literal_eval(), or replace with double quotes then use json.loads(). either way can get the coordianates:

Given:

txt = ["{'type': 'Point', 'coordinates': [35.51635659, 139.5662442]}", "{'type': 'Point', 'coordinates': [51.50178423, -0.05362636]}"]

Option 1:

import json

for each in txt:
    each = each.replace("'", '"')
    jsonObj = json.loads(each) 
    print (jsonObj['coordinates'])

Option 2:

import ast

for each in txt:
    each = ast.literal_eval(each)
    print(each['coordinates'])

Output:

[35.51635659, 139.5662442]
[51.50178423, -0.05362636]

Upvotes: 1

Related Questions