Разбор JSON файла с несколькими массивами с использованием Python - PullRequest
0 голосов
/ 13 июля 2020

Я попытался получить данные из файла JSON и назначить их типу объекта, как показано ниже. Данные имеют несколько массивов в порядке широты и долготы. Используя Python, как я могу справиться с этим?

Текущий Python код *

import os
from flask import Flask, render_template, abort, url_for, json
import json

app = Flask(__name__)

...
with open('./data/file.json', 'r') as myfile:
    data = myfile.read()
    features = json.loads(data)['features']
    for o in features:
        print(o['coordinates'])). <----'Data from JSON file'
...
app.run(host='localhost', debug=True)

Оригинал JSON файл

{
    "features": [{
        "coordinates": [
            [
                [
                    -79.3998992207101,
                    43.770625433748776
                ],
                [
                    -79.39977945240246,
                    43.770651091617324
                ],
                [
                    -79.39970177723474,
                    43.77046066096583
                ],
                [
                    -79.39982154480901,
                    43.77043500133246
                ],
                [
                    -79.3998992207101,
                    43.770625433748776
                ]
            ]
        ]
    }]
}

Данные из JSON файла

[[[-79.3998992207101, 43.770625433748776], [-79.39977945240246, 43.770651091617324], [-79.39970177723474, 43.77046066096583], [-79.39982154480901, 43.77043500133246], [-79.3998992207101, 43.770625433748776]]]

Результат, к которому я стремлюсь

var triangleCoords = [
    {lat: -79.3998992207101, lng: 43.770625433748776},
    {lat: -79.39977945240246, lng: 43.770651091617324},
    {lat: -79.39970177723474, lng: 43.77042949785241},
    {lat: -79.39987169202237, lng: 43.77039053223808}
    .....
  ];

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Вы можете использовать эту действительно простую функцию, просто замените print(o['coordinates'])) на имя функции, как показано в примере

def unpack_coordinates(coordinates):
    coordinates_list = list()
    for item in coordinates[0]:
        coordinates_list.append({"lat": item[0], "lng": item[1]})
    return coordinates_list

# Your Flask code
...
with open('JSON.json', 'r') as myfile:
    data = myfile.read()
    features = json.loads(data)["features"]
    for o in features:
        print(unpack_coordinates(o["coordinates"]))
...

Вывод

[
    {'lat': -79.3998992207101, 'lng': 43.770625433748776}, 
    {'lat': -79.39977945240246, 'lng': 43.770651091617324}, 
    {'lat': -79.39970177723474, 'lng': 43.77046066096583}, 
    {'lat': -79.39982154480901, 'lng': 43.77043500133246}, 
    {'lat': -79.3998992207101, 'lng': 43.770625433748776}
]
0 голосов
/ 14 июля 2020

в зависимости от того, как вы усекали JSON, есть возможность сделать его менее вложенным.

import json

with open('./data/file.json', 'r') as myfile:
    data = myfile.read()
    features = json.loads(data)["features"]
    triangleCoords = []
    for o in features:
        for key, values in o.items():
            for value in values:
                for v in value:
                    triangleCoords.append({"lat": v[0], "lng": v[1]})

print(triangleCoords)

Вывод:

[
    {"lat": -79.3998992207101, "lng": 43.770625433748776},
    {"lat": -79.39977945240246, "lng": 43.770651091617324},
    {"lat": -79.39970177723474, "lng": 43.77046066096583},
    {"lat": -79.39982154480901, "lng": 43.77043500133246},
    {"lat": -79.3998992207101, "lng": 43.770625433748776},
]
0 голосов
/ 14 июля 2020

Оставить только исходный json файл в контексте здесь

In [87]: a = json.laod(open("./data/file.json"))
In [88]: triangleCoords = []

In [89]:  for i in a["features"]:
    ...:     for j in i["coordinates"][0]:
    ...:        triangleCoords.append({"lat":j[0],"lng":j[1]})
    ...:

In [90]: triangleCoords
Out[90]:
[{'lat': -79.3998992207101, 'lng': 43.770625433748776},
 {'lat': -79.39977945240246, 'lng': 43.770651091617324},
 {'lat': -79.39970177723474, 'lng': 43.77046066096583},
 {'lat': -79.39982154480901, 'lng': 43.77043500133246},
 {'lat': -79.3998992207101, 'lng': 43.770625433748776}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...