Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Alura Challenge - JSON

Boa noite,

Minha dúvida é sobre a leitura de um arquivo json. Eu estou tentando fazer a importação do dataset da seguinte maneira:

import pandas as pd
import json

url = 'https://raw.githubusercontent.com/sthemonica/alura-voz/main/Dados/Telco-Customer-Churn.json'

dados = pd.read_json(url)
dados.head()

O colab não gera nenhum tipo de erro até esse ponto do procedimento. O problema aparece quando eu tento abrir um objeto json.

with open(url) as f:
  json_bruto = json.load(f)

O notebook mosta esse erro: FileNotFoundError: [Errno 2] No such file or directory: 'https://raw.githubusercontent.com/sthemonica/alura-voz/main/Dados/Telco-Customer-Churn.json'

O que eu posso fazer para corrigir esse problema?

Obrigado!

4 respostas
solução!

Oii, Eduardo! Tudo bem?

Isso ocorre porque o método open não consegue lidar diretamente com URLs, ou seja, ele espera um caminho de arquivo local, diretamente da sua máquina. Uma possível solução é usar a biblioteca requests para fazer o download do conteúdo do JSON e então carregá-lo com a biblioteca json. Veja como você pode fazer isso:

#Importação das bibliotecas
import pandas as pd
import json
import requests

#Armazenando o link em uma variável
url = 'https://raw.githubusercontent.com/sthemonica/alura-voz/main/Dados/Telco-Customer-Churn.json'

# Carregando os dados diretamente no pandas
dados = pd.read_json(url)
dados.head()

# Fazendo o download do conteúdo do JSON
response = requests.get(url)
json_bruto = response.json()

# Imprimindo os dados
print(json_bruto)

Faça o teste sugerido e observe se funciona como esperado. Caso tenha alguma dúvida, conte conosco.

Bons estudos, Eduardo!

Boa noite,

Deu certinho. Quando eu uso a técnica do comentário 'Fazendo o download do conteúdo do JSON', o colab retorna uma lista de dicionários. Depois disso, eu utilizei o json_normalize e deu certo. Obrigado!

Só uma coisinha, o Open poderia ter funcionado se eu tivesse colocado o 'response' dentro do código ao invés da variável url? Por exemplo:

response = requests.get(url)

e depois:

with open(response) as f:
    json_bruto = json_load(f)

Até mais!

Oii, Eduardo! Tudo bem?

Ele provavelmente geraria um erro. Pois a função open() espera um caminho de arquivo como argumento e você está passando um objeto Response obtido da requests.get(). Como sugestão, nesse caso, você precisa trabalhar diretamente com o conteúdo da resposta HTTP, em vez de tentar abri-la como um arquivo.

Adicionando o requests para buscar os dados do URL fornecido. :

response = requests.get(url)

E depois, usando o .json() do objeto Response para analisar o conteúdo JSON em um dicionário ou lista Python:

json_bruto = response.json()
json.load()

Espero ter ajudado, Eduardo! Conte sempre conosco aqui no fórum.

Abraço!

Obrigado!!