Python JSON: Kodiranje (istovar), dekodiranje (učitavanje) i čitanje JSON datoteke

U čemu je JSON Python?

JSON in Python je standardni format inspiriran JavaSkripta za razmjenu podataka i prijenos podataka u obliku teksta preko mreže. Općenito, JSON je u obliku niza ili teksta. Mogu ga koristiti API-ji i baze podataka, a objekte predstavlja kao parove ime/vrijednost. JSON je skraćenica za JavaNotacija objekta skripte.

Python JSON sintaksa:

JSON je napisan kao par ključa i vrijednosti.

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

JSON je vrlo sličan Python rječnik. Python podržava JSON i ima ugrađenu biblioteku kao JSON.

JSON knjižnica u Python

'maršal"I"kiseli krastavac' vanjski moduli od Python održavati verziju JSON Python knjižnica. Rad s JSON in Python da biste izvršili operacije povezane s JSON-om kao što su kodiranje i dekodiranje, prvo trebate uvoz JSON biblioteka i za to u vašem .py datoteka,

import json

Sljedeće metode dostupne su u JSON-u Python modul

način Description
odlagališta () kodiranje u JSON objekte
istovariti() zapis kodiranog niza u datoteku
opterećenja () Dekodirajte JSON niz
opterećenje() Dekodirajte tijekom čitanja JSON datoteke

Python u JSON (kodiranje)

JSON Knjižnica od Python obavlja sljedeći prijevod Python objekte u JSON objekte prema zadanim postavkama

Python JSON
diktat Objekt
popis Poredak
unicode Niz
broj – int, dug broj – int
plutati broj – pravi
Pravi Pravi
Lažan Lažan
nijedan nula

Pretvaranje Python podataka u JSON naziva se operacija kodiranja. Kodiranje se vrši uz pomoć metode JSON biblioteke – odlagališta ()

JSON dumps() in Python

json.dumps() in Python je metoda koja pretvara objekte rječnika Python u format podataka niza JSON. Korisno je kada se zahtijeva da objekti budu u formatu niza za operacije poput raščlanjivanja, ispisa itd.

Izvedimo sada naš prvi primjer kodiranja json.dumps s 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)

Izlaz:

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

Pogledajmo primjer Python pisati JSON u datoteku za stvaranje JSON datoteke rječnika koristeći istu funkciju istovariti()

# 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)

Izlaz:

Ništa za prikazati…U vašem sustavu stvorena je json_file.json. Tu datoteku možete provjeriti kao što je prikazano u nastavku za pisanje JSON datoteke Python primjer.

Python Primjer JSON kodiranja

JSON za Python (dekodiranje)

Dekodiranje JSON niza vrši se uz pomoć ugrađene metode json.loads() & json.load() JSON knjižnice u Python. Ovdje tablica prijevoda prikazuje primjer JSON objekata u Python predmeti koji su korisni za izvođenje dekodiranja Python JSON niza.

JSON Python
Objekt diktat
Poredak popis
Niz unicode
broj – int broj – int, dug
broj – pravi plutati
Pravi Pravi
Lažan Lažan
nula nijedan

Pogledajmo osnovnu analizu JSON-a Python primjer dekodiranja uz pomoć json.učitava funkcija,

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'))

Izlaz:

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

Python Primjer JSON dekodiranja

Dekodiranje JSON datoteke ili raščlanjivanje JSON datoteke u Python

Sada ćemo naučiti kako čitati JSON datoteku Python s Python raščlani JSON primjer:

NAPOMENA: Dekodiranje JSON datoteke je operacija vezana za ulaz/izlaz datoteke (I/O). JSON datoteka mora postojati na vašem sustavu na navedenoj lokaciji koju ste spomenuli u svom programu.

Python čitanje JSON datoteke Primjer:

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)

Evo podataka je rječnički objekt od Python kao što je prikazano u gornjoj pročitanoj JSON datoteci Python primjer.

Izlaz:

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

Raščlanjivanje JSON datoteke u Python

Kompaktno kodiranje u Python

Kada trebate smanjiti veličinu svoje JSON datoteke, možete upotrijebiti kompaktno kodiranje Python.

Primjer,

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)

Izlaz:

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

Format JSON koda (lijepi ispis)

  • Cilj je napisati dobro formatiran kod za ljudsko razumijevanje. Uz pomoć lijepog ispisa, svatko može lako razumjeti kôd.

Primjer:

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)

Izlaz:

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

Format JSON koda Primjer

Da biste ovo bolje razumjeli, promijenite uvlaku na 40 i promatrajte izlaz-

Format JSON koda Primjer

Naručivanje JSON koda:

sort_ključevi atribut u Python argument funkcije dumps poredat će ključ u JSON-u uzlaznim redoslijedom. Argument sort_keys je Booleov atribut. Ako je istina, sortiranje je dopušteno, inače nije. Da se razumijemo sa Python primjer sortiranja niza u JSON.

Primjer,

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)

Izlaz:

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

Kao što možete vidjeti, starost ključeva, automobili, djeca itd. poredani su uzlaznim redoslijedom.

Kodiranje kompleksnog objekta Python

Složeni objekt ima dva različita dijela tj

  1. Pravi dio
  2. Imaginarni dio

Kodiranje složenih objekata Python

Primjer: 3 +2i

Prije izvođenja kodiranja složenog objekta, trebate provjeriti je li varijabla složena ili ne. Morate izraditi funkciju koja provjerava vrijednost pohranjenu u varijabli pomoću metode instance.

Stvorimo posebnu funkciju za provjeru je li objekt složen ili podoban za kodiranje.

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)

Izlaz:

'[4.0, 5.0]'

Dekodiranje kompleksnog JSON objekta u Python

Za dekodiranje složenog objekta u JSON-u upotrijebite parametar object_hook koji provjerava sadrži li niz JSON složeni objekt ili ne. Razumimo s nizom u JSON Python Primjer,

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)

Izlaz:

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

Pregled klase JSON serijalizacije JSONEncoder

Klasa JSONEncoder koristi se za serijalizaciju bilo kojeg Python objekt tijekom izvođenja kodiranja. Sadrži tri različite metode kodiranja koje su

  • zadano(o) – Implementirano u podklasu i vraća objekt serijalizacije za o objekt.
  • kodirati(o) – Isto kao i JSON ispisi Python metoda vraća JSON niz od Python struktura podataka.
  • iterencode(o) – Predstavite niz jedan po jedan i kodirajte objekt o.

Uz pomoć metode encode() klase JSONEncoder također možemo kodirati bilo koji Python objekt kao što je prikazano u nastavku Python Primjer JSON kodera.

# 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)

Izlaz:

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

Pregled JSON Deserialization klase JSONDecoder

Klasa JSONDecoder koristi se za deserijalizaciju bilo kojeg Python objekt tijekom izvođenja dekodiranja. Sadrži tri različite metode dekodiranja koje su

  • zadano(o) – Implementiran u podklasu i vraća deserijalizirani objekt o objekt.
  • dekodirati(o) – Isto kao povrat metode json.loads(). Python struktura podataka JSON niza ili podataka.
  • sirovo_dekodiranje(o) – Zastupati Python rječnik jedan po jedan i dekodirati objekt o.

Uz pomoć metode decode() klase JSONDecoder, također možemo dekodirati JSON niz kao što je prikazano u nastavku Python Primjer JSON dekodera.

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)

Izlaz:

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

Dekodiranje JSON podataka iz URL-a: primjer iz stvarnog života

Dohvatit ćemo podatke o CityBike NYC (Bike Sharing System) s navedenog URL-a(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) i pretvoriti u format rječnika.

Python učitaj JSON iz datoteke Primjer:

NAPOMENA:- Provjerite je li biblioteka zahtjeva već instalirana u vašem Python, Ako ne, otvorite Terminal ili CMD i upišite

  • (Za Python 3 ili noviji) pip3 instalacijski zahtjevi
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]) 

Izlaz:

<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': ''
}

Iznimke povezane s JSON bibliotekom u Python:

  • Klasa json.JSONDecoderError obrađuje iznimke povezane s operacijom dekodiranja. i to je podklasa od ValueError.
  • Iznimka – json.JSONDecoderError(msg, doc)
  • Parametri iznimke su,
    • msg – Neformatirana poruka o pogrešci
    • doc – JSON dokumenti raščlanjeni
    • pos – početni indeks dokumenta kada je neuspješan
    • lineno – linija bez emisija odgovara poz
    • dvotočka – stupac ne odgovara poz

Python učitaj JSON iz datoteke Primjer:

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")

JSON knjižnica u Python

Beskonačno i NaN Numbers in Python

Format za razmjenu podataka JSON (RFC – zahtjev za komentare) ne dopušta beskonačnu ili nan vrijednost, ali nema ograničenja u Python- Knjižnica JSON za izvođenje operacija vezanih uz Infinite i Nan vrijednost. Ako JSON dobije INFINITE i Nan tip podataka onda ga pretvara u literal.

Primjer,

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))

Izlaz:

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

Ponovljeni ključ u nizu JSON

RFC navodi da naziv ključa treba biti jedinstven u JSON objektu, ali nije obavezan. Python Knjižnica JSON ne pokreće iznimku ponovljenih objekata u JSON-u. Zanemaruje sve ponovljene parove ključ-vrijednost i uzima u obzir samo posljednji par ključ-vrijednost među njima.

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

Izlaz:

{'a': 3}

CLI (sučelje naredbenog retka) s JSON in Python

json.alat pruža sučelje naredbenog retka za provjeru JSON sintakse lijepog ispisa. Pogledajmo primjer CLI-ja

Sučelje naredbenog retka s JSON-om

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

Izlaz:

{
    "name": " Kings Authur "
}

Prednosti JSON in Python

  • Lako se vraćati između spremnika i vrijednosti (JSON to Python i Python u JSON)
  • Čovjeku čitljiv (pretty-print) JSON objekt
  • Široko korišten u rukovanju podacima.
  • Nema istu strukturu podataka u jednoj datoteci.

Ograničenja implementacije JSON-a u Python

  • U deserializatoru JSON raspona i predviđanja broja
  • Maksimalna duljina JSON niza i polja JSON i razine ugniježđenja objekta.

Python JSON Cheat Sheet

Python JSON funkcija Description
json.dumps(person_data) Stvorite JSON objekt
json.dump(person_data, file_write) Stvorite JSON datoteku koristeći File I/O of Python
compact_obj = json.dumps(podaci, separatori=(',',':')) Sažimanje JSON objekta uklanjanjem razmaka iz JSON objekta pomoću separatora
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Formatiranje JSON koda pomoću uvlake
sorted_string = json.dumps(x, indent=4, sort_keys=True) Sortiranje JSON ključa objekta po abecednom redu
complex_obj = json.dumps(4 + 5j, default=complex_encode) Python Kodiranje složenih objekata u JSON
JSONEncoder().encode(colour_dict) Upotreba JSONEncoder klase za serijalizaciju
json.loads(data_string) Dekodiranje JSON niza u Python rječnik pomoću funkcije json.loads().
json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) Dekodiranje složenog JSON objekta u Python
JSONDecoder().decode(colour_string) Upotreba dekodiranja JSON u Python s deserijalizacijom