Executando verificação de segurança...
1

Remover Caracteres de Um Arquivo JSON em Python

Olá comunidade!

Gostaria de ajuda na manipulação de arquivo JSON em Python.
Especificamente, gostaria de remover dois caracteres específicos de uma arquivo em JSON.

Segue abaixo script que gera o arquivo:

import requests

def f_answers():
    for ticket_number in range (0, 1000):
        no_data1 = '{"error":"Ticket not found"}'
        no_data2 ='[]'
        url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
        headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Basic {token}'
        }
        
        answers = requests.get(url, headers = headers)
        
        if answers.text == no_data1:
            print('Ticket nº{} não existe.'.format(ticket_number))
        elif answers.text == no_data2:
            print('Ticket nº{} não há respostas.'.format(ticket_number))                           
        else:            
            file_json = open('/home/trade/_business_intelligence/Indicadores/infra_sustentacao/json/_tiflux/_answers/_answers.json', 'a', encoding = 'utf-8')
            file_json.write(answers.text)
            url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
            answers = requests.get(url, headers = headers)
        
        
f_answers()

Este SCRIPT retorna uma lista de respostas existentes em um determinado ticket. Então, criei esta função para armazenar todas as respostas no mesmo arquivo, mas quando armazena as respostas não fica no padrão JSON devido os caracteres [] que envelopam cada resposta.

Caso consiga remover os caracteres ][ entre uma resposta e outra eu resolvo o problema.

Obrigado comunidade!

Carregando publicação patrocinada...
2

Sem ver o json que é retornado realmente fica complicado de ter uma boa idéia de como resolver, mas acredito que com um simples .replace('[', '').replace(']', '') dê para resolver.

PS: Não que seja a melhor forma, mas é como eu faria. 😁

1

Fiz a alteração sugerida mas ainda retornou com o mesmo problema.
Segue o código:

import requests

def f_answers():
    for ticket_number in range (0, 1000):
        no_data1 = '{"error":"Ticket not found"}'
        no_data2 ='[]'
        url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
        headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Basic {token}'
        }
        
        answers = requests.get(url, headers = headers)
        
        if answers.text == no_data1:
            print('O ticket nº{} não existe.'.format(ticket_number))
        elif answers.text == no_data2:
            print('O ticket nº{} não há respostas.'.format(ticket_number))                           
        else:           
            file_json = open('/home/trade/_business_intelligence/Indicadores/infra_sustentacao/json/_tiflux/_answers/_answers.json', 'a', encoding = 'utf-8')
            file_json.write(answers.text.replace('][', ''))
            url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
            answers = requests.get(url, headers = headers)
            
        
        
f_answers()
2

[EDIT]

Testei com a API aqui do TabNews e deu certinho:


Então, subentendendo que o seu arquivo "/home/trade/_business_intelligence/Indicadores/infra_sustentacao/json/_tiflux/_answers/_answers.json" já possui uma lista dentro dele, mesmo que vazia [] eu usaria da seguinte maneira:

import requests
import json


def f_answers():
    for ticket_number in range(0, 1):
        no_data1 = '{"error":"Ticket not found"}'
        no_data2 = '[]'
        url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
        headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Basic {token}'
        }

        answers = requests.get(url, headers=headers)

        if answers.text == no_data1:
            print('O ticket nº{} não existe.'.format(ticket_number))
        elif answers.text == no_data2:
            print('O ticket nº{} não há respostas.'.format(ticket_number))
        else:
            answer_JSON = answers.json()
            file_path = '/home/trade/_business_intelligence/Indicadores/infra_sustentacao/json/_tiflux/_answers/_answers.json'

            with open(file_path, 'r+', encoding='utf-8') as file:
                # Lê o conteúdo do arquivo
                file_json = json.load(file)

                # Modifica o conteúdo do arquivo
                for answer in answer_JSON:
                    file_json.append(answer)

                # Volta para o início do arquivo
                file.seek(0)
                # Sobrescreve o conteúdo do arquivo com o conteúdo modificado
                json.dump(file_json, file, indent=4)


f_answers()

Note que será necessário a biblioteca json. Além disso, é recomendado usar o gerenciador de contexto with para abrir o arquivo, pois isso garante que o arquivo será fechado corretamente após a leitura.

0

PESSOAL, DEU CERTO!!!

Com nossas conversas, o caminho foi 'clareando'. Desenvolvi essa solução para o problema.

import requests

def f_answers():
    _list = ''
    for ticket_number in range (0, 30):
        no_data1 = '{"error":"Ticket not found"}'
        no_data2 ='[]'
        url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
        headers = {
            'Content-Type': 'application/json',
            'Authorization': 'Basic {token}'
        }
        answers = requests.get(url, headers = headers)
        
        if answers.text == no_data1:
            print('O ticket nº{} não existe.'.format(ticket_number))
        elif answers.text == no_data2:
            print('O ticket nº{} não há respostas.'.format(ticket_number))                           
        else:
            _list = _list + answers.text
            print(_list)
            url = 'https://api.tiflux.com/api/v1/tickets/{}/answers?offset=1&limit=200'.format(ticket_number)
            answers = requests.get(url, headers = headers)
    
    file_json = open('/home/trade/_business_intelligence/Indicadores/infra_sustentacao/json/_tiflux/_answers/_answers_1.json', 'w', encoding = 'utf-8')
    file_json.write(_list.replace('][', ','))
            
    
                    
f_answers()

Arquivo gerado:

[
    {
        "id": 6293419,
        "author": "Arlem de Bairros Mota",
        "created_at": "2022-11-21 19:07:14",
        "name": "apontamento 8x5",
        "ticket_number": 9,
        "user": {
            "id": 49690,
            "name": "Arlem de Bairros Mota"
        }
    },
    {
        "id": 6389699,
        "author": "Everton Luiz da Silva",
        "created_at": "2022-11-29 18:33:59",
        "name": "teste ",
        "ticket_number": 12,
        "user": {
            "id": 49948,
            "name": "Everton Luiz da Silva"
        }
    },
    {
        "id": 6389452,
        "author": "Everton Luiz da Silva",
        "created_at": "2022-11-29 18:27:21",
        "name": "Teste de apontamento²",
        "ticket_number": 12,
        "user": {
            "id": 49948,
            "name": "Everton Luiz da Silva"
        }
    },
    {
        "id": 6389350,
        "author": "Everton Luiz da Silva",
        "created_at": "2022-11-29 18:24:40",
        "name": "Teste de apontamento",
        "ticket_number": 12,
        "user": {
            "id": 49948,
            "name": "Everton Luiz da Silva"
        }
    },
    {
        "id": 6358439,
        "author": "Arlem de Bairros Mota",
        "created_at": "2022-11-25 20:35:10",
        "name": "Somente teste",
        "ticket_number": 20,
        "user": {
            "id": 49690,
            "name": "Arlem de Bairros Mota"
        }
    }
]

Estou consumindo essa API pra gerar esses arquivos e através do Power BI desenvolver indicadores de desempenho/performance.

VALEU COMUNIDADE!!!