(i json) Получение элемента с любым префиксом - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть json файл, подобный этому:

{
    "europe": [
      "germany",
      "france",
      ...
    ],
    "america": [
      "usa",
      "canada",
      ...
    ]
  }

Я хочу получить все элементы каждого префикса, как это:

germany
france
usa
canada

Я использую это:

with open('file.json', 'r', encoding='utf-8') as f:
    for object in ijson.items(f, "item"):
        print (object)

Я пробовал это с регулярным выражением, которое принимает каждую строку перед item, но это не работает. Я думаю, что есть действительно простое решение, которого я просто не вижу. Также посмотрел в документации по i json, но тоже не нашел решения.

Может быть, вы мне поможете.

Привет

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

В настоящее время нет способа сделать это с items, так как он не поддерживает подстановочные знаки или спецификации глубины. Самое близкое, что вы можете получить без суеты (с 2.6), это:

for continent, countries in ijson.kvitems(f, ''):
   for country in countries:
      print(country)

Если отдельные списки стран слишком велики, чтобы их можно было сохранить в памяти, вам придется прибегнуть к более ручному подходу, основанному на на ijson.parse() отслеживая «глубину» вашего пути.

0 голосов
/ 04 февраля 2020

Правильно ли я понимаю, что вы просто хотите получить список всех стран без континентов?

import json
with open('file.json', 'r', encoding='utf-8') as f:
    countries = [con for coun in json.load(f).values() for con in coun]
print(countries)
...