Как из json вытащить нужные данные python
Перейти к содержимому

Как из json вытащить нужные данные python

  • автор:

Извлечение данные из JSON в Python

Я работаю с qiwi api на python 3.9. Мне нужно извлечь определенные данные из json’а и записать их в бд. Есть следующий код:

token = 'api token' wallet = 'wallet number' def payment_history(): s = requests.Session() s.headers['Authorization'] = 'Bearer ' + token parameters = # последние 10 платежей h = s.get('https://edge.qiwi.com/payment-history/v2/persons/' + wallet + '/payments', params = parameters) return h.json() 

Ответом мне приходит json, где в data идут последние 10 платежей. Вот кусок из json’а:

< "data":[ < "txnId":12345678901, "personId":79161112233, "date":"2021-07-30T14:29:33+03:00", "errorCode":0, "error":"None", "status":"SUCCESS", "type":"IN", "statusText":"Success", "trmTxnId":"1122334455667", "account":"", "sum":< "amount":12, "currency":643 >, "comment":"None", "currencyRate":1, >, < "txnId":12345678902, "personId":79161112233, "date":"2021-07-30T14:29:11+03:00", "errorCode":0, "error":"None", "status":"SUCCESS", "type":"IN", "statusText":"Success", "trmTxnId":"11223344556", "account":"", "sum":< "amount":8, "currency":643 >, "comment":"комментарий к платежу", "currencyRate":1, > ], "nextTxnId":"None", "nextTxnDate":"None" > 

Подскажите пожалуйста, как можно извлечь из этого json’а значения txnId , sum.amount и comment ? Буду благодарен любой помощи

Отслеживать
задан 30 июл 2021 в 11:48
43 2 2 серебряных знака 7 7 бронзовых знаков

А что попробовали вы? Этот сайт не предназначен для просьб написать код за вас. Расскажите, что вы попробовали, что не получилось, что непонятно в документации.

30 июл 2021 в 12:04

@ArseniMourzenko я не просил писать готовый код. В вопросе еще была затронута субд, но с этим уже разобрался. Я прошу лишь подсказать, как извлекать определнные значения из json’а.

30 июл 2021 в 12:38

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Добавлю комментарии по нескольким строкам json-а, дальше, надеюсь, будет понятнее:

Начало json -а, все элементы, которые лежат на следующем уровне можно получить, обращаясь как к словарю (фигурная скобка — это словарь в питоне): json[key]

 "data":[ 

Соответственно, то, что лежит в data получаем так json[‘data’] .
Но дальше мы видим квадратную скобку, это значит в элементе json-а data лежит список, а не просто значение.

А тут мы видим, что первым же элементом списка, т.е. json[‘data’][0] , начался ещё один словарь.

 "txnId":12345678901, 

Берём ту конструкцию, которая у нас получалась выше и обращаемся к ней как к словарю за элементом txnId : json[‘data’][0][‘txnId’]

А тут тоже самое, что и выше, только элемент словаря другой, а в нём опять ещё один словарь (фигурная скобка): json[‘data’][0][‘sum’][‘amount’] .

Если сами не можете догадаться или сомневаетесь, что же там дальше, ничто не мешает вам на любом этапе остановиться, напечатать элемент до которого вы добрались, и посмотреть — а что же там дальше в нём лежит, например:

print(json['data'][0]['sum']) 

Это я добрался вручную в самый первый элемент списка в ‘data’ . Чтобы добраться до остальных элементов этого списка, их нужно перебрать циклом for , доступ их нижележащим элементам будет точно такой же, как мы разобрались выше для первого (с индексом 0 ) элемента:

for item in json['data']: print(item['sum']['amount'] 

Пользуясь этой методикой вы легко можете добраться до любого элемента json :

  • к элементам в фигурных скобках обращаемся как к значениям словаря (по ключу)
  • к элементам в квадратных скобках обращаемся как к элементам списка (по индексу, обычно мы перебираем их через for )
  • через запятую идут элементы, лежащие на одном уровне
  • после двоеточия идёт следующий уровень, где может лежать либо одно значение, либо словарь, либо список

Как использовать json в Python для получения данных

В этом примере мы импортируем модуль json и используем функцию loads для преобразования JSON-строки в словарь. Затем мы можем обращаться к значениям по ключам, используя обычный синтаксис словарей в Python.

Детальный ответ

JSON в Python: Как получить данные

JSON (JavaScript Object Notation) — это удобный формат для обмена данными между сервером и клиентом. Python предоставляет встроенную библиотеку для работы с JSON, которая позволяет получать данные из JSON-файлов и преобразовывать их в структуры данных Python. В этой статье мы рассмотрим различные способы получения данных из JSON-файлов с помощью Python.

1. Импорт модуля JSON

Прежде чем начать работу с JSON в Python, нам необходимо импортировать модуль json. Здесь основная роль играют два метода: json.loads() и json.load(). Метод json.loads() используется для преобразования строки JSON в объект Python, а метод json.load() — для чтения JSON-файла и преобразования его в объект Python.

import json

2. Парсинг JSON из строки

Чтобы получить данные из строки JSON, мы можем использовать метод json.loads(). Он принимает в качестве аргумента строку JSON и возвращает объект Python, соответствующий этой строке. Пример:

json_str = '' data = json.loads(json_str) print(data['name']) # Выводит "John"

3. Чтение JSON-файла

Чтобы получить данные из JSON-файла, мы можем использовать метод json.load(). Он принимает в качестве аргумента имя JSON-файла и возвращает объект Python, соответствующий содержимому этого файла. Пример:

with open('data.json') as json_file: data = json.load(json_file) print(data['name']) # Выводит значение ключа "name" из JSON-файла

4. Получение данных из вложенных JSON-объектов и массивов

JSON может содержать вложенные объекты и массивы. Чтобы получить доступ к данным внутри этих структур, мы можем использовать операторы индексации [] и точки . Пример:

json_str = ', "interests": ["programming", "reading"]>' data = json.loads(json_str) print(data['pets']['dog']) # Выводит "Buddy" print(data['interests'][0]) # Выводит "programming"

5. Обработка ошибок при работе с JSON

При работе с JSON в Python может возникать ошибка, если JSON невалиден. Чтобы избежать ошибок, мы можем использовать блок try-except для обработки исключения JSONDecodeError. Пример:

json_str = '' try: data = json.loads(json_str) print(data['name']) except json.JSONDecodeError as e: print(f'Ошибка при обработке JSON: ')

Заключение

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

How to Parse JSON in Python

json data in python

JSON is a popular format for data exchange. Python ships with a built-in JSON module to parse and work with JSON data. And this tutorial will teach you all about working with JSON in Python.

By the end of this tutorial, you’ll have learned:

  • the basics of JSON,
  • how to parse and create JSON strings in Python, and
  • how to read from and write to JSON files in Python.

What is JSON?

JSON stands for J ava S cript O bject N otation, and it’s a text-based format for data interchange. Though JSON is initially inspired by JavaScript objects, almost all programming languages support working with JSON.

If you’ve ever worked with APIs or read through configuration files—you’d likely have run into JSON.

�� You send and receive data in JSON when querying APIs. And JSON is also widely used in client-server communication in software applications. In addition, you can use JSON for general-purpose data storage as well.

The format of JSON is very similar to that of a Python dictionary. Dictionaries are powerful built-in data structures in Python that store data in key-value pairs.

Before we go any further, here are a few points worth noting:

  • In Python, a JSON object is stored as a dictionary.
  • An array in JSON is stored as a Python list.
  • In JSON, the Boolean values are denoted as true and false . In Python, these are converted to the Booleans True and False .

For more details on the data types that are translated from JSON to Python, read the docs here.

As the json module is part of the Python standard library, you don’t have to install it. You can import into your current directory, like this:

import json

How to Load a JSON String in Python

The general syntax to load a JSON string in Python is:

 = json.loads()
  • is the Python dictionary to which you’d like to load the JSON string,
  • is any valid JSON string.

This loads the into the Python dictionary .

Let’s code an example. Here json_str is a JSON string.

json_str = ''' < "books": [ < "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" >, < "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" >] > '''

And the code snippet below shows how you can load the JSON string json_str into a Python dictionary using the loads() method. You can use the built-in type() function to verify that py_dict is a Python dictionary.

py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output , ]>

As shown in the above code, all fields in the JSON string are key-value pairs in py_dict .

How to Create JSON Strings in Python

Let’s suppose you have a Python dictionary. So how do you create a JSON string from it?

You can do it using the dumps() method with this syntax:

 = json.dumps()
  • is the Python dictionary from which you’d like to create the JSON string,
  • is the resultant JSON string.

So the dumps() method dumps into a JSON string .

To our existing Python dictionary py_dict . let’s add a new key «movies» . You can do it as shown in the following code snippet:

py_dict["movies"] = []

Now, let’s dump the modified dictionary to a new JSON string json_str2 using the dumps() method.

json_str2 = json.dumps(py_dict) print(json_str2) # Output , ], "movies": []> 

As you can see in the above example, the output JSON string is difficult to read through without proper formatting. You can use the optional parameter indent to add indentation.

And you can do this by setting indent to an integer like 2, as shown below:

json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output < "books": [ < "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" >, < "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" >], "movies": [ < "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true >] >

Observe how the output has been formatted with indentation, and it’s easy to follow through.

Note: �� If you want the keys to be sorted in alphabetical order, you can set the sort_keys parameter to True .

As you can see in the code snippet below, the keys have now been sorted in alphabetical order.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output < "books": [ < "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" >, < "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" >], "movies": [ < "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" >]

And the keys now appear in alphabetical order: «author» , «title» and «year» .

So far, you’ve learned how to work with JSON strings in Python. In the next section, you’ll learn how to work with JSON files.

How to Read a JSON File in Python

To read a JSON file in Python, use the following syntax:

json.load() # where is any valid JSON file.

Notice how we use the load() method and not the loads() method. loads() loads a JSON string, while load() loads a JSON file.

You should consider using context managers when working with files in Python. You can also try to read files as follows, without using context manager:

my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()

If you don’t close the file, there can be a potential wastage of resources.

However, when working with context managers, the files are automatically closed once the file operations are complete.

And you can use context manager to read files, as shown below:

with open('students.json','r') as file: data = json.load(file) print(data) # Output , ]>

As you’re reading from a file, specify the mode as read—indicated by ‘r’ in the above code.

Note: In order to navigate easily through the current directory, please ensure that the JSON file is in the same folder as main.py , as shown in the image below. If your JSON file is in a different folder be sure to specify the path to the file.

read-json-file-in-python

In the next section, you’ll learn how to write to a JSON file.✍

How to Write to a JSON File in Python

To write to an existing JSON file or to create a new JSON file, use the dump() method as shown:

json.dump(,) # where is a Python dictionary # and is the JSON file 

So the above syntax dumps the dictionary into the JSON file .

In the previous section, we had the dictionary py_dict . Now let’s dump that into a new JSON file. And let’s name it new_file.json .

And the following code cell shows how you can use the dump() function:

with open('new_file.json','w') as file: json.dump(py_dict,file)

Note: Opening a file in the write mode ( w ) overwrites the content if the file exists. If the file doesn’t exist, the file is created.

After executing the above code cell, you’ll see that a new JSON file has been created in the current working directory. And you can go ahead and examine the contents of the JSON file.

create-json-file-python

When writing to files, the key goal is data storage. And if you’d like to preserve formatting, you can also use the indent and sort_keys parameters.

Conclusion

⏲ It’s time for a quick summary.

In this tutorial, you have learned:

  • the basics of using JSON,
  • how to use the loads() and load() methods to read JSON string and JSON files respectively,
  • how to use the dumps() and dump() methods to dump Python dictionaries into JSON strings and JSON files respectively.

I hope you found this tutorial helpful. Happy learning!

Извлечь из json значение

так тоже пробовал, выдает это: temp_dict = json.loads(resp.json()) File «/usr/lib/python3.8/json/__init__.py», line 341, in loads raise TypeError(f’the JSON object must be str, bytes or bytearray, ‘ TypeError: the JSON object must be str, bytes or bytearray, not coroutine

6 окт 2021 в 21:00

Если строка, которую Вы привели, именно такая, то приведённый код работает, я только что проверил в python 3. Запишите Вашу строку из примера в какую-то переменную (например, temp_str) и выполните код для temp_dict = json.loads(temp_str). Всё должно распарситься. Если не выходит — прикрепите точный код, который выполняете, и ошибку.

6 окт 2021 в 21:08

temp_dict = json.loads(temp_str) File «/usr/lib/python3.8/json/__init__.py», line 341, in loads raise TypeError(f’the JSON object must be str, bytes or bytearray, ‘ TypeError: the JSON object must be str, bytes or bytearray, not coroutine

6 окт 2021 в 21:19
полный код добавил, но ссылку не могу дать, так как платный токен прописан
6 окт 2021 в 21:20

Токен не нужно, конечно) Добавьте отладочную печать print temp_str (перед командой json.loads(temp_str)) и покажите, что именно хранится в temp_str непосредственно перед ошибкой. Может, сервер какой-то нехарактерный ответ выдаёт, где этого поля нет вообще — например, пустую строку или ошибку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *