Получение данных из файла json с помощью python3. Как печатать определенные детали из пула данных?

Итак, я пытался получить данные из этого json-файла, содержащего информацию о запасах. Я совершенно новичок в python, а json почти иностранец. Но я понимаю концепции, и мне может понадобиться небольшой толчок в правильном направлении. Я делал руководства для начинающих по Python и потратил много времени, чтобы разобраться в этом самостоятельно, и, честно говоря, я не знаю, что делаю, и я считаю, что мне следует больше учиться, но я действительно зациклился на этом. Так что простите меня за вопросы, когда я, вероятно, даже не пойму никаких ответов, которые вы могли бы предложить. Но тогда я смогу, по крайней мере, провести больше исследований, основанных на ваших предложениях, и получить больше знаний, провести некоторые тесты и снять их.

Я на archlinux, с python 3, у меня есть код в некоторых файлах .py, которые я запускаю в терминале. Я гуглил и провел много тестов. Я вижу, что есть несколько способов сделать то, что я пытаюсь сделать, и у меня также есть несколько других образцов для работы, где файл json был структурирован немного по-другому. Но я никогда не мог заставить его работать с файлом json, из которого я пытался получить данные. Ниже то, что у меня есть.

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import urllib.request
    import json
    url = 'https://silverrive.com/pages/Issuers_sample.json'
    req = urllib.request.Request(url)

    r = urllib.request.urlopen(req).read()
    cont = json.loads(r.decode('utf-8'))

    print(cont)

Итак, если вы посмотрите на файл json, это будут разные записи, и я хотел бы иметь возможность извлекать, например, только строки/числа, содержащие «ShortingPercent», и распечатывать их в моем терминале. Теперь я не получаю никаких ошибок с кодом, представленным выше, проблема в том, что все содержимое файла json сбрасывается в мой терминал, поэтому я думаю, что я на правильном пути, фактически получая данные на терминал, но я не знаю, как чтобы отсортировать, исключить или просто выбрать нужные мне части.

Все тесты, которые я сделал, чтобы просто распечатать части данных, всегда приводят к «неопределенной» строке или к тому, что список индексов должен быть целым числом, а не строками, или что-то в этом роде. Так что я вроде как знаю, в чем проблема, я просто не знаю, как должен выглядеть правильный синтаксис. Я верю, что это как-то связано со строками формата, но мне не удалось создать ничего большего, чем описано выше.

Также я знаю, что мне следует изучить больше основ, прежде чем пробовать такие вещи, но это очаровало меня, и да, у меня есть обсессивно-компульсивное расстройство, так что это действительно беспокоит меня.

Я разместил файл json на своем собственном веб-сайте, поэтому вы можете скопировать код и просмотреть все поступающие данные json.

Если кто-то хочет помочь, большое спасибо.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Весь файл json загружается в cont. Вам просто нужно отфильтровать нужные значения.

print(cont['Positions'][0]['ShortPercent']) print(cont['Positions'][1]['ShortPercent'])

shovan rai 07.04.2019 14:23

Спасибо за ответ. Я пробовал некоторые варианты, основанные на ваших предложениях, но мне не удалось получить данные из «продолжения», я попытался добавить следующее, просто чтобы посмотреть, смогу ли я получить какой-то вывод. print(cont['ShortPercent']) # или print(cont['NetShortPosition']['Id']) print(cont['NetShortPosition']['2']) print(cont['Positions'][0] ['ShortPercent']) print(cont['Positions'][1]['ShortPercent']) print(cont['ISIN'][3]['ShortPercent']) Таким образом, "cont" заполняет феты всеми данные Джейсона, но я не могу отсортировать значения. Должно быть, я что-то недопонимаю. @шован рай

friflyt 07.04.2019 20:22

Ничего себе, это было грязно, извините за это. Вот часть вывода терминала: >>> print(cont['Positions'][1]['ShortPercent']) Трассировка (последний последний вызов): Файл "<stdin>", строка 1, в <module > TypeError: индексы списка должны быть целыми числами или фрагментами, а не строками >>> print(cont['ISIN'][3]['ShortPercent']) Traceback (последний последний вызов): File "<stdin>", строка 1 , в <module> TypeError: индексы списка должны быть целыми числами или срезами, а не str >>>

friflyt 07.04.2019 20:26

Извините, сначала вам нужно проиндексировать переменную cont. Я добавил скриншот, пожалуйста, обратитесь к нему.

shovan rai 08.04.2019 07:20

Да! то есть, теперь все работает, спасибо @shovan_rai! Очень признателен

friflyt 08.04.2019 17:29

Я думаю, что так и сделал, также добавил представителя, вы можете подтвердить? И как пометить тему как "Решено"?

friflyt 08.04.2019 17:37

Другие вопросы по теме