Как разобрать JSON, который имеет только цифры

Я все еще изучаю 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 ответа


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

#!/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 это как 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 позже.

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


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

from itertools import chain

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

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


Есть идеи?

10000