Python Data Persistence - Módulo JSON

JSON significa JavaScript Object Notation. É um formato de intercâmbio de dados leve. É um formato de texto independente de linguagem e plataforma cruzada, suportado por muitas linguagens de programação. Este formato é usado para troca de dados entre o servidor web e clientes.

O formato JSON é semelhante ao pickle. No entanto, a serialização pickle é específica do Python, enquanto o formato JSON é implementado por muitas linguagens, portanto, tornou-se um padrão universal. A funcionalidade e a interface do módulo json na biblioteca padrão do Python são semelhantes aos módulos pickle e marshal.

Assim como no módulo pickle, o módulo json também fornece dumps() e loads() função para serialização de objeto Python em string codificada JSON, e dump() e load() funções escrevem e lêem objetos Python serializados de / para o arquivo.

  • dumps() - Esta função converte o objeto no formato JSON.

  • loads() - Esta função converte uma string JSON de volta em um objeto Python.

O exemplo a seguir demonstra o uso básico dessas funções -

import json
   data=['Rakesh',{'marks':(50,60,70)}]
   s=json.dumps(data)
json.loads(s)

A função dumps () pode receber o argumento sort_keys opcional. Por padrão, é False. Se definido como True, as chaves do dicionário aparecem em ordem classificada na string JSON.

A função dumps () tem outro parâmetro opcional chamado indent que recebe um número como valor. Ele decide o comprimento de cada segmento da representação formatada da string json, semelhante à saída de impressão.

O módulo json também possui API orientada a objetos correspondente às funções acima. Existem duas classes definidas no módulo - JSONEncoder e JSONDecoder.

Classe JSONEncoder

O objeto desta classe é um codificador para estruturas de dados Python. Cada tipo de dados Python é convertido no tipo JSON correspondente, conforme mostrado na tabela a seguir -

Pitão JSON
Dict objeto
lista, tupla matriz
Str corda
Enums derivados de int, float, int- & float número
Verdadeiro verdadeiro
Falso falso
Nenhum nulo

A classe JSONEncoder é instanciada pelo construtor JSONEncoder (). Os seguintes métodos importantes são definidos na classe do codificador -

Sr. Não. Métodos e Descrição
1

encode()

serializa o objeto Python no formato JSON

2

iterencode()

Codifica o objeto e retorna um iterador que produz a forma codificada de cada item no objeto.

3

indent

Determina o nível de indentação da string codificada

4

sort_keys

é verdadeiro ou falso para fazer as chaves aparecerem em ordem classificada ou não.

5

Check_circular

se True, verifique a referência circular no objeto de tipo de recipiente

O exemplo a seguir codifica o objeto de lista Python.

e=json.JSONEncoder()
e.encode(data)

Classe JSONDecoder

O objeto desta classe ajuda na decodificação da string json de volta para a estrutura de dados Python. O método principal desta classe é decode (). O código de exemplo a seguir recupera o objeto de lista Python da string codificada na etapa anterior.

d=json.JSONDecoder()
d.decode(s)

O módulo json define load() e dump() funções para gravar dados JSON em um arquivo como objeto - que pode ser um arquivo de disco ou um fluxo de bytes e ler os dados de volta deles.

despejar ()

Esta função grava dados do objeto Python JSONed em um arquivo. O arquivo deve ser aberto com o modo 'w'.

import json
data=['Rakesh', {'marks': (50, 60, 70)}]
   fp=open('json.txt','w')
   json.dump(data,fp)
   fp.close()

Este código criará 'json.txt' no diretório atual. Mostra o conteúdo da seguinte forma -

["Rakesh", {"marks": [50, 60, 70]}]

carga()

Esta função carrega dados JSON do arquivo e retorna o objeto Python dele. O arquivo deve ser aberto com permissão de leitura (deve ter o modo 'r').

Example

fp=open('json.txt','r')
   ret=json.load(fp)
   print (ret)
   fp.close()

Output

['Rakesh', {'marks': [50, 60, 70]}]

o json.tool O módulo também possui uma interface de linha de comando que valida os dados no arquivo e imprime o objeto JSON de uma maneira bastante formatada.

C:\python37>python -m json.tool json.txt
[
   "Rakesh",   
   {
      "marks": [
         50,
         60,
         70
      ]
   }
]