1
resposta

Não são criados um json para cada restaurante

Olá. Rodando o código como foi feito na aula, ao invés de criar um json para cada restaurante contendo o cardápio dele, apenas o primeiro é criado (da Pizza Hut):

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá! O problema é que o trecho que salva os arquivos JSON para cada restaurante está fora do bloco if response.status_code == 200, ou seja, ele só roda se o status for diferente de 200 — justamente o contrário do esperado.

O que está errado:

Veja o trecho do código:

if response.status_code == 200:
    ...
    print(dados_json)
else:
    print(f"Erro ao acessar a URL: {response.status_code}")

#criando um arquivo JSON para cada restaurante...
for nome_do_restaurante, dados in dados_restaurante.items():

Esse for que salva os arquivos JSON está fora do bloco if. Se o response.status_code for 200, o código de escrita não é executado, e por isso você só vê o arquivo da Pizza Hut (provavelmente foi criado em uma execução anterior).


Correção

Você deve indentar o bloco de criação dos arquivos JSON para que ele fique dentro do if response.status_code == 200:

if response.status_code == 200:
    dados_json = response.json()
    dados_restaurante = {}
    for item in dados_json:
        nome_do_restaurante = item['Company']
        if nome_do_restaurante not in dados_restaurante:
            dados_restaurante[nome_do_restaurante] = []

        dados_restaurante[nome_do_restaurante].append({
            'item': item['Item'],
            'price': item['price'],
            'description': item['description']
        })

    print(dados_json)

    # criando um arquivo JSON para cada restaurante contendo o seu cardápio
    for nome_do_restaurante, dados in dados_restaurante.items():
        nome_do_arquivo = f'{nome_do_restaurante}.json'
        with open(nome_do_arquivo, 'w') as arquivo_restaurante:
            json.dump(dados, arquivo_restaurante, indent=4)

else:
    print(f"Erro ao acessar a URL: {response.status_code}")

Resumo

Corrigir a indentação para que a escrita dos arquivos só aconteça quando a resposta da API for bem-sucedida (status_code == 200).