JSON Python: codificar (despejar), decodificar (carregar) dados json & Arquivo (exemplo)

Índice:

Anonim

O que é JSON?

JSON é um formato padrão para troca de dados, inspirado em JavaScript. Geralmente, JSON está em formato de string ou texto. JSON meios J ava S cript O bject N otation.

A sintaxe de JSON: JSON é escrita como um par de chave e valor.

{"Key": "Value","Key": "Value",}

JSON é muito semelhante ao dicionário Python. Python suporta JSON e tem uma biblioteca embutida como JSON.

Biblioteca JSON em Python

Módulos externos ' marshal ' e ' pickle' do Python mantêm uma versão da biblioteca JSON . Para realizar operações relacionadas a JSON, como codificação e decodificação em Python, você precisa primeiro importar a biblioteca JSON e, para isso, em seu arquivo .py ,

import json

Os seguintes métodos estão disponíveis no módulo JSON

Método Descrição
lixões() codificação para objetos JSON
jogar fora() escrita de string codificada em arquivo
carrega () Decodifique a string JSON
carregar() Decodificar enquanto o arquivo JSON é lido

Python para JSON (codificação)

Biblioteca JSON de Python executa a seguinte tradução de objetos Python em objetos JSON por padrão

Pitão JSON
dict Objeto
Lista Variedade
Unicode Fragmento
número - int, longo número - int
flutuador numero - real
Verdade Verdade
Falso Falso
Nenhum Nulo

A conversão de dados Python em JSON é chamada de operação de codificação. A codificação é feita com a ajuda do método da biblioteca JSON - dumps ()

O método dumps () converte o objeto de dicionário de python em formato de dados de string JSON.

Agora vamos realizar nosso primeiro exemplo de codificação com Python.

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice","Bob"),"pets": ['Dog'],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}]}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Resultado:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Vamos criar um arquivo JSON do dicionário usando a mesma função dump ()

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Resultado:

Nada para mostrar

… Em seu sistema json_file.json é criado, você pode verificar esse arquivo.

JSON para Python (decodificação)

Descodificação JSON string é feito com a ajuda do método inerente cargas () e load () da biblioteca JSON em Python. Aqui, a tabela de tradução mostra um exemplo de objetos JSON para objetos Python que são úteis para realizar a decodificação em Python de strings JSON.

JSON Pitão
Objeto dict
Variedade Lista
Fragmento Unicode
número - int número - int, longo
numero - real flutuador
Verdade Verdade
Falso Falso
Nulo Nenhum

Vamos ver um exemplo básico de decodificação em Python com a ajuda da função json.loads () ,

import json # json library imported# json data stringperson_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'# Decoding or converting JSON format in dictionary using loads()dict_obj = json.loads(person_data)print(dict_obj)# check type of dict_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Resultado:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Decodificando arquivo JSON ou analisando arquivo JSON em Python

NOTA: A decodificação do arquivo JSON é uma operação relacionada à entrada / saída de arquivo (E / S). O arquivo JSON deve existir em seu sistema no local especificado que você menciona em seu programa.

Exemplo,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Aqui, os dados são um objeto de dicionário do Python.

Resultado:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Codificação compacta em Python

Quando precisar reduzir o tamanho do seu arquivo JSON, você pode usar a codificação compacta em Python.

Exemplo,

import json# Create a List that contains dictionarylst = ['a', 'b', 'c',{'4': 5, '6': 7}]# separator used for compact representation of JSON.# Use of ',' to identify list items# Use of ':' to identify key and value in dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)

Resultado:

'["a", "b", "c", {"4": 5, "6": 7}]'** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj ** 

Formato de código JSON (Pretty print)

  • O objetivo é escrever um código bem formatado para a compreensão humana. Com a ajuda da impressão bonita, qualquer pessoa pode entender facilmente o código.
  • Exemplo,
import jsondic = { 'a': 4, 'b': 5 }''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))print(formatted_obj)

Resultado:

{"a" : 4,"b" : 5}

Para entender melhor isso, altere o recuo para 40 e observe o resultado

Solicitando o código JSON:

O atributo sort_keys no argumento da função dumps () classificará a chave em JSON em ordem crescente. O argumento sort_keys é um atributo booleano. Quando é verdade, a classificação é permitida, caso contrário não

Exemplo,

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice", "Bob"),"pets": [ 'Dog' ],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}],}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Resultado:

{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}

Como você pode observar a idade das chaves, carros, crianças, etc. estão organizados em ordem crescente.

Codificação de objeto complexo de Python

Um objeto complexo tem duas partes diferentes que são

  1. Parte real
  2. Parte imaginária

Exemplo: 3 + 2i

Antes de realizar a codificação de um objeto complexo, você precisa verificar se uma variável é complexa ou não. Você precisa criar uma função que verifique o valor armazenado em uma variável usando um método de instância.

Vamos criar a função específica para verificar se o objeto é complexo ou elegível para codificação.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Resultado:

'[4.0, 5.0]'

Decodificação de objeto JSON complexo em Python

Para decodificar um objeto complexo em JSON, use um parâmetro object_hook que verifica se a string JSON contém o objeto complexo ou não. Exemplo,

import json# function check JSON string contains complex objectdef is_complex(objct):if '__complex__' in objct:return complex(objct['real'], objct['img'])return objct# use of json loads method with object_hook for check object complex or notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)

Resultado:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

Visão geral da classe JSON de serialização JSONEncoder

A classe JSONEncoder é usada para serialização de qualquer objeto Python durante a execução da codificação. Ele contém três métodos diferentes de codificação que são

  • default (o) - Implementado na subclasse e retorna serializar objeto para o objeto.
  • encode (o) - O mesmo que o método json.dumps () retorna a string JSON da estrutura de dados Python.
  • iterencode (o) - Representa a string uma por uma e codifica o objeto o.

Com a ajuda do método encode () da classe JSONEncoder, também podemos codificar qualquer objeto Python.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Resultado:

'{"colour": ["red", "yellow", "green"]}'

Visão geral da classe de desserialização JSON JSONDecoder

A classe JSONDecoder é usada para desserialização de qualquer objeto Python durante a decodificação. Ele contém três métodos diferentes de decodificação que são

  • default (o) - Implementado na subclasse e retorna o objeto desserializado o objeto.
  • decode (o) - O mesmo que o método json.loads () retorna a estrutura de dados Python da string JSON ou dados.
  • raw_decode (o) - Representa o dicionário Python um por um e decodifica o objeto o.

Com a ajuda do método decode () da classe JSONDecoder, também podemos decodificar a string JSON.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Resultado:

{'colour': ['red', 'yellow']}

Decodificando dados JSON do URL: exemplo da vida real

Buscaremos os dados do CityBike NYC (Bike Sharing System) no URL especificado (https://feeds.citibikenyc.com/stations/stations.json) e os converteremos para o formato de dicionário.

Exemplo,

NOTA: - Certifique-se de que a biblioteca de solicitações já esteja instalada em seu Python, se não, abra o Terminal ou CMD e digite

  • (Para Python 3 ou superior) solicitações de instalação pip3
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Resultado:

{'id': 487,'stationName': 'E 20 St & FDR Drive','availableDocks': 24,'totalDocks': 34,'latitude': 40.73314259,'longitude': -73.97573881,'statusValue': 'In Service','statusKey': 1,'availableBikes': 9,'stAddress1': 'E 20 St & FDR Drive','stAddress2': '','city': '','postalCode': '','location': '','altitude': '','testStation': False,'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''}

Exceções relacionadas à biblioteca JSON em Python:

  • A classe json.JSONDecoderError trata a exceção relacionada à operação de decodificação. e é uma subclasse de ValueError.
  • Exceção - json.JSONDecoderError (msg, doc)
  • Os parâmetros de exceção são,
    • msg - mensagem de erro não formatada
    • doc - documentos JSON analisados
    • pos - inicia o índice do doc quando ele falha
    • lineno - a ausência de linha corresponde à pos
    • dois pontos - coluna não corresponde a pos

Exemplo,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")

Números infinitos e NaN em Python

JSON Data Interchange Format (RFC - Request For Comments) não permite Infinite ou Nan Value, mas não há nenhuma restrição na biblioteca Python-JSON para executar operações relacionadas a Infinite e Nan Value. Se JSON obtiver o tipo de dados INFINITE e Nan, ele será convertido em literal.

Exemplo,

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Resultado:

InfinityNaNinf

Chave repetida em string JSON

RFC especifica que o nome da chave deve ser exclusivo em um objeto JSON, mas não é obrigatório. A biblioteca Python JSON não gera uma exceção de objetos repetidos em JSON. Ele ignora todos os pares de valores-chave repetidos e considera apenas o último par de valores-chave entre eles.

  • Exemplo,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Resultado:

{'a': 3}

CLI (Command Line Interface) com JSON em Python

json.tool fornece a interface de linha de comando para validar a sintaxe de impressão bonita JSON. Vamos ver um exemplo de CLI

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Resultado:

{"name": " Kings Authur "}

Vantagens do JSON em Python

  • Fácil de mover de volta entre contêiner e valor (JSON para Python e Python para JSON)
  • Objeto JSON legível por humanos (impressão bonita)
  • Amplamente utilizado no tratamento de dados.
  • Não possui a mesma estrutura de dados em um único arquivo.

Limitação de implementação de JSON em Python

  • No desserializador de intervalo JSON e previsão de um número
  • O comprimento máximo da string JSON e matrizes de JSON e níveis de aninhamento de objeto.

Código de trapaça

json.dumps (person_data)

Criar objeto JSON

json.dump (person_data, file_write)

Criar arquivo JSON usando I / O de arquivo Python

compact_obj = json.dumps (dados, separadores = (',', ':'))

Objeto JSON compacto removendo o caractere de espaço do objeto JSON usando o separador

formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':'))

Formatando código JSON usando Indent

Sort_string = json.dumps (x, indent = 4, sort_keys = True)

Classificando a chave do objeto JSON por ordem alfabética

complex_obj = json.dumps (4 + 5j, padrão = complex_encode)

Codificação de objeto complexo Python em JSON

JSONEncoder (). Encode (colour_dict)

Uso da classe JSONEncoder para serialização

json.loads (data_string)

Decodificando string JSON no dicionário Python usando a função json.loads ()

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Decodificação de objeto JSON complexo para Python

JSONDecoder (). Decodificar (colour_string)

Uso de decodificação de JSON para Python com desserialização