У меня есть список с данными json, как показано ниже:
txt
["{'тип': 'Точка', 'координаты': [35.51635659, 139.5662442]}", "{'тип': 'точка', 'координаты': [51.50178423, -0.05362636]}"]
Я пытаюсь извлечь долготу и широту из координат, но я действительно борюсь с этим.
Когда я пытаюсь:
for each in txt:
print(each)
он возвращает:
{'тип': 'точка', 'координаты': [35.51635659, 139.5662442]} {'тип': 'точка', 'координаты': [51.50178423, -0.05362636]}
когда я пытаюсь:
json_normalize(json.loads(txt))
Я получаю следующую ошибку:
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
Если бы кто-нибудь мог помочь, это было бы очень признательно
Спасибо
Ах, по какой-то причине dict кажется строковым :). Почему они струнные?
данные изначально были в фрейме данных, я просмотрел его: для каждого в шнурах ['geo']: txt.append (каждый)
import ast; for each in txt:..x = ast.literal_eval(each);..print(x['coordinates'])Почему cords['geo'] в строках? :)
красиво спасибо :-) ; ты спас мой день. К вашему сведению, вы имели в виду: print(x['координаты'])






Словарь представляет собой строку, поэтому вам нужно либо использовать ast.literal_eval(), либо заменить двойными кавычками, а затем использовать json.loads(). в любом случае можно получить координаты:
Дано:
txt = ["{'type': 'Point', 'coordinates': [35.51635659, 139.5662442]}", "{'type': 'Point', 'coordinates': [51.50178423, -0.05362636]}"]
Опция 1:
import json
for each in txt:
each = each.replace("'", '"')
jsonObj = json.loads(each)
print (jsonObj['coordinates'])
Вариант 2:
import ast
for each in txt:
each = ast.literal_eval(each)
print(each['coordinates'])
Выход:
[35.51635659, 139.5662442]
[51.50178423, -0.05362636]
1 для каждого в txt: ----> 2 print(каждый['координаты']) TypeError: строковые индексы должны быть целыми числами