Python JSON: codificați (descarcă), decodificați (încărcați) și citiți fișierul JSON

În ce este JSON Python?

JSON in Python este un format standard inspirat de JavaScript pentru schimbul de date și transferul de date ca format text printr-o rețea. În general, JSON este în format șir sau text. Poate fi folosit de API-uri și baze de date și reprezintă obiecte ca perechi nume/valoare. JSON înseamnă JavaScript Object Notation.

Python Sintaxa JSON:

JSON este scris ca pereche cheie și valoare.

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

JSON este foarte asemănător cu Python dicţionar. Python acceptă JSON și are o bibliotecă încorporată ca JSON.

Biblioteca JSON în Python

"mareșal' și 'murătură' module externe ale Python menține o versiune a JSON Python bibliotecă. Lucrul cu JSON în Python pentru a efectua operațiuni legate de JSON, cum ar fi codificarea și decodarea, trebuie mai întâi să faceți import Biblioteca JSON și pentru asta în dvs PY fişier,

import json

Următoarele metode sunt disponibile în JSON Python modul

Metodă Descriere
gropi () codificare la obiecte JSON
dump() șir codificat scris pe fișier
incarca() Decodați șirul JSON
sarcină() Decodați în timp ce fișierul JSON este citit

Python la JSON (codare)

JSON Biblioteca de Python efectuează următoarea traducere a Python obiecte în obiecte JSON în mod implicit

Python JSON
dict Obiect
listă Mulțime
unicode Şir
număr – int, lung număr – int
pluti număr – real
Adevărat Adevărat
Fals Fals
Nici unul Null

Conversia Python datele în JSON se numesc operație de codificare. Codificarea se face cu ajutorul metodei bibliotecii JSON - gropi ()

JSON aruncă () în Python

json.dumps() in Python este o metodă care convertește obiectele dicționarului din Python în format de date șir JSON. Este util atunci când obiectele trebuie să fie în format șir pentru operațiuni precum analizarea, imprimarea etc.

Acum să executăm primul nostru exemplu de codificare json.dumps cu Python:

import json

x = {
  "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)

ieșire:

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

Să vedem un exemplu de Python scrieți JSON în fișier pentru a crea un fișier JSON al dicționarului folosind aceeași funcție dump()

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

ieșire:

Nimic de afișat... În sistemul dvs. este creat json_file.json. Puteți verifica acel fișier așa cum se arată în mai jos, scrieți JSON în fișier Python exemplu.

Python Exemplu de codificare JSON

JSON la Python (Decodare)

Decodificarea șirurilor JSON se face cu ajutorul metodei încorporate json.loads() & json.load() din biblioteca JSON în Python. Aici tabelul de traducere arată un exemplu de obiecte JSON către Python obiecte care sunt utile pentru a efectua decodarea în Python de șir JSON.

JSON Python
Obiect dict
Mulțime listă
Şir unicode
număr – int număr – int, lung
număr – real pluti
Adevărat Adevărat
Fals Fals
Null Nici unul

Să vedem o analiză JSON de bază Python exemplu de decodare cu ajutorul json.încărcări funcţie,

import json  # json library imported
# json data string
person_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_obj
print("Type of dict_obj", type(dict_obj))
# get human object details
print("Person......",  dict_obj.get('person'))

ieșire:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Python Exemplu de decodare JSON

Decodificarea fișierului JSON sau analizarea fișierului JSON în Python

Acum, vom învăța cum să citim fișierul JSON în Python cu Python exemplu de analiză JSON:

NOTĂ: Decodificarea fișierului JSON este o operație legată de intrare/ieșire (I/O). Fișierul JSON trebuie să existe pe sistemul dvs. în locația specificată pe care o menționați în program.

Python citește fișierul JSON Exemplu:

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

Aici date este un obiect de dicționar al Python așa cum se arată în fișierul JSON citit de mai sus Python exemplu.

ieșire:

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

Se analizează fișierul JSON în Python

Codificare compactă în Python

Când trebuie să reduceți dimensiunea fișierului dvs. JSON, puteți utiliza codificare compactă Python.

Exemplu,

import json
# Create a List that contains dictionary
lst = ['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 dictionary
compact_obj = json.dumps(lst, separators=(',', ':'))
print(compact_obj)

ieșire:

'["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 **

Formatați codul JSON (pretty print)

  • Scopul este de a scrie cod bine formatat pentru înțelegerea umană. Cu ajutorul unei imprimări frumoase, oricine poate înțelege cu ușurință codul.

Exemplu:

import json
dic = { '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)

ieșire:

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

Format cod JSON Exemplu

Pentru a înțelege mai bine acest lucru, schimbați indentarea la 40 și observați rezultatul-

Format cod JSON Exemplu

Comandând codul JSON:

sort_keys atribut în Python Argumentul funcției dump va sorta cheia în JSON în ordine crescătoare. Argumentul sort_keys este un atribut boolean. Când este adevărată sortarea este permisă, altfel nu. Să înțelegem cu Python exemplu de sortare șir în JSON.

Exemplu,

import json

x = {
  "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)

ieșire:

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

După cum puteți observa, cheile de vârstă, mașinile, copiii etc sunt aranjate în ordine crescătoare.

Codarea obiectelor complexe a Python

Un obiect complex are două părți diferite, adică

  1. Parte reală
  2. Parte imaginară

Codificarea obiectelor complexe de Python

Exemplu: 3 +2i

Înainte de a efectua codificarea unui obiect complex, trebuie să verificați că o variabilă este complexă sau nu. Trebuie să creați o funcție care verifică valoarea stocată într-o variabilă folosind o metodă de instanță.

Să creăm funcția specifică pentru verificarea obiectului este complex sau eligibil pentru codificare.

import json

# create function to check instance is complex or not
def complex_encode(object):
    # check using isinstance method
    if isinstance(object, complex):
        return [object.real, object.imag]
    # raised error using exception handling if object is not complex
    raise TypeError(repr(object) + " is not JSON serialized")


# perform json encoding by passing parameter
complex_obj = json.dumps(4 + 5j, default=complex_encode)
print(complex_obj)

ieșire:

'[4.0, 5.0]'

Decodare complexă a obiectelor JSON în Python

Pentru a decoda un obiect complex în JSON, utilizați un parametru object_hook care verifică că șirul JSON conține obiectul complex sau nu. Să înțelegem cu șir în JSON Python Exemplu,

import json
  # function check JSON string contains complex object
  def 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 not
  complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)
  #here we not passed complex object so it's convert into dictionary
  simple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)
  print("Complex_object......",complex_object)
  print("Without_complex_object......",simple_object)

ieșire:

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

Prezentare generală a clasei de serializare JSON JSONEncoder

Clasa JSONEncoder este utilizată pentru serializarea oricărui Python obiect în timpul efectuării codificării. Conține trei metode diferite de codare care sunt

  • implicit(o) – Implementat în subclasă și returnează obiectul serialize pentru o obiect.
  • codifica (o) – La fel ca și depozitele JSON Python metoda returnează șirul JSON de Python structură de date.
  • itercode(o) – Reprezentați șirul unul câte unul și codificați obiectul o.

Cu ajutorul metodei encode() din clasa JSONEncoder, putem, de asemenea, codifica orice Python obiect așa cum se arată în cele de mai jos Python Exemplu de codificator JSON.

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

ieșire:

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

Prezentare generală a clasei de deserializare JSON JSONDecoder

Clasa JSONDecoder este utilizată pentru deserializarea oricăror Python obiect în timpul efectuării decodării. Conține trei metode diferite de decodare care sunt

  • implicit(o) – Implementat în subclasă și returnează obiectul deserializat o obiect.
  • decoda (o) – La fel ca metoda json.loads() return Python structura de date a șirului sau datelor JSON.
  • raw_decode(o) – Reprezintă Python dicționar unul câte unul și decodează obiectul o.

Cu ajutorul metodei decode() a clasei JSONDecoder, putem decoda și șirul JSON așa cum se arată mai jos Python Exemplu de decodor JSON.

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

ieșire:

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

Decodificarea datelor JSON de la URL: exemplu de viață reală

Vom prelua datele CityBike NYC (sistem de partajare a bicicletelor) de la adresa URL specificată (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) și convertiți în format dicționar.

Python încărcați JSON din fișier Exemplu:

NOTĂ: - Asigurați-vă că biblioteca de solicitări este deja instalată în dvs Python, Dacă nu, deschideți Terminal sau CMD și tastați

  • (Pentru Python 3 sau mai sus) solicitări de instalare pip3
import json
import requests

# get JSON string data from CityBike NYC using web requests library
json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json")
# check type of json_response object
print(type(json_response.text))
# load data in loads() function of json library
bike_dict = json.loads(json_response.text)
#check type of news_dict
print(type(bike_dict))
# now get stationBeanList key data from dict
print(bike_dict['stationBeanList'][0]) 

ieșire:

<class 'str'>
<class 'dict'>
{
	'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': ''
}

Excepții legate de biblioteca JSON în Python:

  • Clasă json.JSONDecoderError se ocupă de excepția legată de operațiunea de decodare. și este o subclasă a ValueError.
  • Excepție - json.JSONDecoderError(msg, doc)
  • Parametrii excepției sunt:
    • msg – Mesaj de eroare neformatat
    • doc – documente JSON analizate
    • pos – porniți indexul documentului când nu a reușit
    • lineno – line no shows corespunde poz
    • colon – coloana nu corespunde poz

Python încărcați JSON din fișier Exemplu:

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

Biblioteca JSON în Python

Infinit și NaN Numbers in Python

Formatul de schimb de date JSON (RFC – Solicitare de comentarii) nu permite Valoare infinită sau Nan, dar nu există nicio restricție în Python- Biblioteca JSON pentru a efectua operațiuni legate de Infinite și Nan Value. Dacă JSON primește tipul de date INFINITE și Nan, atunci este convertit în literal.

Exemplu,

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

ieșire:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Cheie repetată în șirul JSON

RFC specifică că numele cheii ar trebui să fie unic într-un obiect JSON, dar nu este obligatoriu. Python Biblioteca JSON nu ridică o excepție a obiectelor repetate în JSON. Ignoră toate perechile cheie-valoare repetate și ia în considerare doar ultima pereche cheie-valoare dintre ele.

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

ieșire:

{'a': 3}

CLI (Command Line Interface) cu JSON în Python

json.tool oferă interfața de linie de comandă pentru a valida sintaxa JSON pretty-print. Să vedem un exemplu de CLI

Interfață de linie de comandă cu JSON

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

ieșire:

{
    "name": " Kings Authur "
}

Avantajele JSON în Python

  • Ușor de mutat înapoi între container și valoare (JSON la Python si Python la JSON)
  • Obiect JSON care poate fi citit de om (destul de imprimat).
  • Utilizat pe scară largă în manipularea datelor.
  • Nu are aceeași structură de date în fișierul unic.

Limitări de implementare a JSON în Python

  • În deserializarea gamei JSON și predicția unui număr
  • Lungimea maximă a șirului JSON și a matricelor de JSON și a nivelurilor de imbricare ale obiectului.

Python Cheat Sheet JSON

Python Funcția JSON Descriere
json.dumps(persoană_date) Creați obiect JSON
json.dump(persoană_date, fișier_scriere) Creați fișierul JSON utilizând File I/O of Python
compact_obj = json.dumps(date, separatori=(',',':')) Compactați obiectul JSON prin eliminarea caracterului spațiu din obiectul JSON folosind separatorul
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Formatarea codului JSON folosind Indent
sortd_string = json.dumps(x, indent=4, sort_keys=True) Sortarea cheii obiectului JSON în ordine alfabetică
complex_obj = json.dumps(4 + 5j, implicit=complex_encode) Python Codarea obiectelor complexe în JSON
JSONEncoder().encode(colour_dict) Utilizarea clasei JSONEncoder pentru serializare
json.loads(șir_date) Decodificarea șirului JSON în Python dicționar folosind funcția json.loads().
json.loads('{“__complex__”: adevărat, „real”: 4, „img”: 5}', object_hook = is_complex) Decodificarea unui obiect JSON complex la Python
JSONDecoder().decode(șir_culoare) Utilizarea decodării JSON pentru Python cu deserializare