извлечь значения из списка формата JSON - PullRequest
0 голосов
/ 07 марта 2019

У меня есть список с данными json, как показано ниже:

txt

["{'type': 'Point', 'координаты': [35.51635659, 139.5662442]}", "{'type': 'Точка', 'координаты': [51.50178423, -0.05362636]} "]

Я пытаюсь извлечь long и lat из координат, но я действительно борюсь с этим.

Когда я пытаюсь:

for each in txt:
    print(each)

, он возвращает:

{'type': 'Point', 'координаты': [35.51635659, 139.5662442]} {'type':' Точка ',' координаты ': [51.50178423, -0.05362636]}

при попытке:

json_normalize(json.loads(txt))

Я получаю следующую ошибку:


TypeError Traceback (последний последний вызов) в ----> 1 json_normalize (json.loads (txt))

C: \ ProgramData \ Anaconda3 \ lib \ json__init __. Py в загрузках (с), кодировка, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, ** kw) 339 else: 340, если не isinstance (s, (bytes, bytearray)): -> 341 повысить TypeError (для объекта JSON должен бытьstr, bytes или bytearray, '342 f'not {s. class . name }') 343 s = s.decode (detect_encoding (s), 'surrogatepass') *

TypeError: объект JSON должен быть str, байтами или байтовым массивом, а не списком

Если кто-то может помочь, он будет очень признателен

Спасибо

1 Ответ

1 голос
/ 07 марта 2019

Словарь представляет собой строку, поэтому вам нужно либо использовать 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]
...