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
]
}
]