Как разобрать JSON, который имеет только цифры - PullRequest
2 голосов
/ 17 мая 2019

Я все еще изучаю Python и пытаюсь проанализировать данные из JSON, который выглядит как

{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]

, но я не могу найти способ прочитать его, например, как

Для записи 297050 это список [12, 137], [193, 776] Для записи 297056 это список [12, 203]

Я пробовал что-то подобное

import json
from pprint import pprint

input_file = open ('file_JSON.txt')
json_array = json.load(input_file)
store_list = []


for obj in json_array :
    print obj,json_array[obj]

, который дает мне объект и массив для каждого

297050 [[12, 137], [193, 776]]

, ноЯ хотел бы на самом деле быть в состоянии напечатать каждый из элементов, которые появляются внутри, например, json_array [obj] [0] ... и т.д.

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы, вероятно, должны использовать вложенные циклы ... что именно вы должны печатать, зависит от того, как вы ожидаете, что ваш вывод будет выглядеть ... но вы можете попробовать это:

#!/usr/bin/env python3
import json

data = '{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}'

data = json.loads(data)

for k, v in data.items():
    print(k)
    for list_of_ints in v:
        for integer in list_of_ints:
            print(integer)

Результат:

297050
12
137
193
776
297056
12
203

Объяснение:

Мы загружаем образец json и используем items для перебора его пар ключ-значение.Теперь наши ключи в k, а самый внешний список в v.v - это список и список списков .. поэтому мы повторяем это как list_of_ints.И, наконец, мы перебираем каждый из этих списков, распечатывая внутренние целые числа по ходу дела.

Если в качестве выходных данных вы хотите:

Для записи 297050 это список [12, 137], [193, 776] Для записи 297056 это список [12,203]

Тогда мы можем просто немного изменить скрипт ... и избавиться от множества циклов.

#!/usr/bin/env python3
import json

output = "For entry {} this is the list {}"
data = '{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}'

data = json.loads(data)

for k, v in data.items():
    lists_with_commas = ", ".join([str(x) for x in v])
    print(output.format(k, lists_with_commas), end=" ")

Вывод

For entry 297050 this is the list [12, 137], [193, 776] For entry 297056 this is the list [12, 203]

Объяснение:

Мы используем строку шаблона .. у нее есть {}, куда мы хотим поместить материал, чтобы мы могли запустить .format позже.

Нам нужны только ключи и самые внутренние списки.Так что нам нужен только один цикл for.Мы удостоверимся, что мы получаем запятые в примере, используя .join, и внутри мы делаем понимание списка, которое превращает все списки в строки внутри v.

0 голосов
/ 17 мая 2019

Вы можете сделать это.Чтобы вывести значения из списка линейным способом.

from itertools import chain

j = {"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}

for k in j:
     print(k)
     print('\t' + ', '.join(map(str, chain(*j[k]))))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...