Obter JSON de URL em Python

Sahil Bhosale 30 março 2021
Obter JSON de URL em Python

Sempre que quisermos obter quaisquer dados de um servidor web usando uma URL, esses dados devem ter algum formato específico. Em geral, sempre que queremos buscar dados do servidor web, usamos os formatos JSON ou XML.

Preferimos JSON em vez de XML porque ele se tornou bastante popular na indústria de software. Existem várias bibliotecas em Python para processar JSON.

Ao longo deste tutorial, usaremos os módulos json e requests, que estão disponíveis em Python.

Os dados JSON que buscaremos são do URL abaixo. Esta URL permite-nos obter todos os dados relativos aos utilizadores como nome, email, morada, etc. A sua utilização é gratuita.

https://jsonplaceholder.typicode.com/users

Em termos de APIs Restful, os URLs são chamados de endpoints. Ao longo deste tutorial, usaremos essas duas palavras alternadamente. No URL acima, /users refere-se a um terminal.

Se você abrir a URL acima no navegador, verá todos os dados relacionados a users no formato JSON. É mostrado abaixo.

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
]

Observe que mostramos apenas os dados JSON relacionados a um único usuário no bloco de código acima. Isso é apenas para fins de explicação. Mas se você visitar a URL, verá os dados de todos os usuários.

O JSON refere-se a JavaScript Object Notation. É usado para enviar e receber dados entre um servidor e um cliente e vice-versa. Aqui, não se confunda com a palavra JavaScript; JSON é independente de qualquer linguagem de programação. Em JSON, usamos dois tipos de colchetes para formatar os dados; um são os colchetes [] que representam um array ou uma lista, e o outro são os colchetes {} que representam um objeto.

Os dados dentro do JSON sempre estarão na forma de pares chave-valor entre aspas "". Portanto, se você deseja acessar qualquer valor, deve usar a chave associada a esse valor. Por exemplo, digamos que queremos acessar o nome do usuário a partir dos dados JSON acima; usaremos a chave name para obter o valor Leanne Graham, que é o nome do primeiro usuário. Além disso, observe que nenhum comentário é permitido em JSON.

Obtenha e acesse dados JSON em Python

Primeiro, precisamos importar os módulos requests e json para obter e acessar os dados.

import requests
import json

Buscar e converter dados do URL em uma string

A primeira etapa que temos que realizar aqui é buscar os dados JSON usando a biblioteca requests.

url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
print(type(text))

Resultado:

<class 'str'>

A biblioteca requests tem um método chamado get() que pega um URL como parâmetro e então envia um pedido GET para o URL especificado. A resposta que obtemos do servidor é armazenada na variável chamada url.

Esta resposta armazenada dentro da variável url precisa ser convertida em uma string com a ajuda do método .text como url.text. E então, armazenamos o resultado na variável text. Se você imprimir o tipo da variável text, ela será do tipo <class 'str'>.

Parsethe JSON Data

A análise é um processo de conversão de dados de string em formato JSON. Para isso, estaremos utilizando o módulo json.

data = json.loads(text)
print(type(data))

Resultado:

<class 'list'>

O módulo json vem com um método chamado loads(), o s em loads() significa string. Como queremos converter dados de string em JSON, usaremos este método. Dentro deste método, temos que passar a variável text que contém os dados da string json.loads(text) e armazená-la dentro da variável data.

Agora, os dados terão toda a resposta JSON. Se você imprimir o tipo da variável data, então será do tipo <class 'list'> porque, neste caso, a resposta JSON começa com colchetes [] e em Python, as listas começam com um quadrado colchetes.

Acesse os dados JSON

Agora que analisamos os dados JSON, estamos prontos para acessar os valores individuais que queremos usando a variável data. Para acessar os detalhes do primeiro usuário, como nome e endereço, podemos fazer o seguinte.

import json
import requests

url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text

data = json.loads(text)

user = data[0]
print(user["name"])

address = user["address"]
print(address)

Resultado:

Leanne Graham
{'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}

Para acessar o primeiro usuário da lista de usuários, temos que usar o índice 0 dos dados JSON, que é armazenado dentro de uma variável chamada data, e então armazenar todos os detalhes daquele primeiro dentro do user. Agora, este users é um objeto que contém todos os detalhes relacionados a esse usuário. Para acessar o nome, basta passar a chave name dentro da variável user como user['name'] e depois imprimi-lo. Ele imprimirá o nome do usuário dentro do console.

E para acessar o endereço, temos que passar a chave address dentro da variável do usuário, ou seja, user['address'], e então armazená-lo dentro de uma variável chamada address e depois imprimi-la. Isso lhe dará um objeto que conterá todos os detalhes específicos relacionados ao campo de endereço, como nº do apartamento, nome da rua, código postal e assim por diante. Digamos que a partir desses detalhes você queira apenas o zipcode do usuário; então você tem que passar a chave do código zipcode dentro do objeto address.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn

Artigo relacionado - Python JSON