3
respostas

Transformar um dicionario em um json

Olá. Estou com a seguinte dúvida.

A diferença de json e dicionário está no double quote e single quote.

Eu tenho esse dicionário abaixo, por exemplo:

{
 'private_key_id': 'abcd',
 'token_uri': 'https://oauth2.googleapis.com/token',
 'client_email': 'xuxuzinho@teste.iam.gserviceaccount.com',
 'client_id': '123456789',
 'project_id': 'xuxinho-teste-123456',
 'type': 'service_account'
 }

e quero transformar em json usando python, o resultado que eu gostaria seria o abaixo:

{
 "private_key_id": "abcd",
 "token_uri": "https://oauth2.googleapis.com/token",
 "client_email": "xuxuzinho@teste.iam.gserviceaccount.com",
 "client_id": "123456789",
 "project_id": "xuxinho-teste-123456",
 "type": "service_account"
 }

Eu tentei usar o replace, tranformando em string e depois tentando usar o json.loads, mas ele tranforma em dicionário e eu precisava que fosse um josn com double quotes.

Agradeço a ajuda!

3 respostas

Olá Yara, tudo bem?

Para fazer essa conversão você pode usar a biblioteca de json do python e usar a propriendade dumps. Vou te mostrar um exemplo de código que faz isso:

import json

dicionario = {
  'private_key_id': 'abcd',
  'token_uri': 'https://oauth2.googleapis.com/token',
  'client_email': 'xuxuzinho@teste.iam.gserviceaccount.com',
  'client_id': '123456789',
  'project_id': 'xuxinho-teste-123456',
  'type': 'service_account'
}

resultadoJson = json.dumps(dicionario)

print(resultadoJson)

Veja o resultado:

Resultado da conversão de dicionario para json

Espero ter ajudado! Bons estudos!

Olá André! Muito obrigada pelo retorno e explicação.

Eu cheguei a tentar o json.dumps, mas ele me retorna uma string:

In [109]: type(resultadoJson)
Out[109]: str

então, quando eu comparo, o resultado fica diferente do esperado... DICIONÁRIO == STRING False

In [110]: outroResultado = {"private_key_id": "abcd", "token_uri": "https://oauth2.googleapis.com/token", "client_email": "xuxuzinho@tes
     ...: te.iam.gserviceaccount.com", "client_id": "123456789", "project_id": "xuxinho-teste-123456", "type": "service_account"}
     ...: 

In [111]: type(outroResultado)
Out[111]: dict

In [112]: outroResultado == resultadoJson
Out[112]: False

Por favor, conseguiria me ajudar?

Como estou usando uma API, ele compara se as informações são iguais.

Estou guardando os valores do json, mas quando eu busco, ele vem em aspas simples e quando comparo com o valor que eu deveria passar que é um json com aspas duplas, ele não reconhece como o mesmo json.

O resultado esperado é um json, com os valores de chave/ valor envoltos de chaves duplas (double quotes).

Bom Yara, não sei se entendi muito bem, mas se seu objetivo for comparar apenas dois json não importa se está com aspas simples ou dupla. Vou te mostra o exemplo do dicionario com aspas simples e o json com aspas duplas e a comparação retornar True:

Exemplo de comparação de dicionario e json com resultado True

Agora, se eu alterar um valor, por exemplo o abdd para ABCD no dadosJson, você verá que o resultado da comparação é False:

Exemplo de comparação de dicionario e json com resultado False

Agora, com relação ao dumps, você tinha razão. A conversão transforma ele em String, e com isso não é possível acessar os dados diretamente. Para fazer isso é preciso converter a String novamante, e isso pode ser feito usando loads. Dessa forma:

resultadoJson = json.dumps(dicionario)
resultadoJson = json.loads(resultadoJson)

# E acessar os dados dessa forma aqui, por exemplo
print(resultadoJson['private_key_id'])

Veja que o resultado do print será:

Acessando dados em json

Mas você notará que essa conversão vai transformar novamente as aspas duplas em simples. Não sei se ajudei muito, mas qualquer coisa é só falar ;)