Python JSON: Kódovat (vypíše), Dekódovat (načte) a číst soubor JSON
V čem je JSON Python?
JSON in Python je standardní formát inspirovaný JavaSkript pro výměnu dat a přenos dat v textovém formátu po síti. Obecně je JSON ve formátu řetězce nebo textu. Mohou jej používat rozhraní API a databáze a představuje objekty jako dvojice název/hodnota. JSON znamená JavaZápis objektu skriptu.
Python Syntaxe JSON:
JSON je zapsán jako pár klíč a hodnota.
{ "Key": "Value", "Key": "Value", }
JSON je velmi podobný Python slovník. Python podporuje JSON a má vestavěnou knihovnu jako JSON.
Knihovna JSON v Python
"maršál' a 'lák' externí moduly Python udržovat verzi JSON Python knihovna. Práce s JSON v Python Chcete-li provádět operace související s JSON, jako je kódování a dekódování, musíte nejprve import Knihovna JSON a k tomu ve vašem .py Soubor,
import json
V JSON jsou k dispozici následující metody Python modul
Metoda | Description |
---|---|
skládky() | kódování do objektů JSON |
vyhodit() | zápis zakódovaného řetězce do souboru |
načte() | Dekódujte řetězec JSON |
zatížení() | Dekódujte při čtení souboru JSON |
Python na JSON (kódování)
JSON Knihovna Python provádí následující překlad Python objekty do objektů JSON ve výchozím nastavení
Python | JSON |
---|---|
dict | Objekt |
lest | Řada |
unicode | Řetězec |
číslo – int, long | číslo – int |
vznášet se | číslo – skutečné |
Pravdivý | Pravdivý |
Falešný | Falešný |
Nevyplněno | Null |
Konvertování Python data do JSON se nazývá operace kódování. Kódování se provádí pomocí metody knihovny JSON – skládky()
JSON vypíše() do Python
json.dumps() in Python je metoda, která převádí objekty slovníku Python do datového formátu řetězce JSON. Je užitečné, když je požadováno, aby objekty byly ve formátu řetězce pro operace, jako je analýza, tisk atd.
Nyní provedeme náš první příklad kódování 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)
Výstup:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Podívejme se na příklad Python zápis JSON do souboru pro vytvoření souboru JSON slovníku pomocí stejné funkce vyhodit()
# 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)
Výstup:
Nic k zobrazení…Ve vašem systému je vytvořen soubor json_file.json. Tento soubor můžete zkontrolovat, jak je znázorněno v níže uvedeném zápisu JSON do souboru Python příklad.
JSON do Python (Dekódování)
Dekódování řetězce JSON se provádí pomocí vestavěné metody json.loads() & json.load() knihovny JSON v Python. Zde překladová tabulka ukazuje příklad objektů JSON do Python Objekty které jsou užitečné při provádění dekódování Python řetězce JSON.
JSON | Python |
---|---|
Objekt | dict |
Řada | lest |
Řetězec | unicode |
číslo – int | číslo – int, long |
číslo – skutečné | vznášet se |
Pravdivý | Pravdivý |
Falešný | Falešný |
Null | Nevyplněno |
Podívejme se na základní analýzu JSON Python příklad dekódování s pomocí json.loads funkce,
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'))
Výstup:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Dekódování souboru JSON nebo analýza souboru JSON Python
Nyní se naučíme, jak číst soubor JSON Python s Python příklad analýzy JSON:
POZNÁMKA: Dekódování souboru JSON je operace související se vstupem/výstupem souboru (I/O). Soubor JSON musí existovat ve vašem systému v určeném umístění, které uvádíte ve svém programu.
Python číst soubor JSON Příklad:
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)
Zde údaje je slovníkovým objektem Python jak je znázorněno ve výše uvedeném souboru JSON Python příklad.
Výstup:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktní kódování v Python
Pokud potřebujete zmenšit velikost souboru JSON, můžete použít kompaktní kódování Python.
Příklad,
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)
Výstup:
'["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 **
Formát kódu JSON (pěkný tisk)
- Cílem je napsat dobře naformátovaný kód pro lidské porozumění. S pomocí pěkného tisku může každý snadno pochopit kód.
Příklad:
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)
Výstup:
{ "a" : 4, "b" : 5 }
Abyste tomu lépe porozuměli, změňte odsazení na 40 a sledujte
Objednání kódu JSON:
sort_keys atribut v Python argument funkce dumps seřadí klíč v JSON vzestupně. Argument sort_keys je booleovský atribut. Když je to pravda, třídění je povoleno, jinak ne. Pojďme si rozumět s Python příklad řazení řetězce do JSON.
Příklad,
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)
Výstup:
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Jak můžete pozorovat stáří klíčů, auta, děti atd. jsou uspořádány vzestupně.
Komplexní kódování objektů Python
Komplexní objekt má dvě různé části
- Skutečná část
- Imaginární část
Příklad: 3 +2i
Před provedením kódování složitého objektu musíte zkontrolovat, zda je proměnná složitá nebo ne. Musíte vytvořit funkci, která kontroluje hodnotu uloženou v proměnné pomocí metody instance.
Pojďme vytvořit specifickou funkci pro kontrolu, zda je objekt složitý nebo vhodný pro kódování.
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)
Výstup:
'[4.0, 5.0]'
Komplexní dekódování JSON objektů Python
Chcete-li dekódovat komplexní objekt v JSON, použijte parametr object_hook, který kontroluje, zda řetězec JSON obsahuje komplexní objekt nebo ne. Pojďme si rozumět s řetězcem do JSON Python Příklad,
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)
Výstup:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Přehled serializační třídy JSON JSONEncoder
Třída JSONEncoder se používá pro serializaci libovolného Python objekt při provádění kódování. Obsahuje tři různé metody kódování, které jsou
- výchozí (o) – Implementováno v podtřídě a vrátit objekt serializace pro o objekt.
- kódovat (o) – Stejné jako výpisy JSON Python metoda vrací řetězec JSON Python datová struktura.
- iterencode(o) – Reprezentovat řetězec jeden po druhém a kódovat objekt o.
Pomocí metody encode() třídy JSONEncoder můžeme také zakódovat libovolné Python objekt, jak je znázorněno níže Python Příklad kodéru 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)
Výstup:
'{"colour": ["red", "yellow", "green"]}'
Přehled třídy deserializace JSON JSONDecoder
Třída JSONDecoder se používá pro deserializaci libovolného Python objekt při provádění dekódování. Obsahuje tři různé metody dekódování, které jsou
- výchozí (o) – Implementováno v podtřídě a vrátit deserializovaný objekt o objekt.
- dekódovat (o) – Stejné jako návrat metody json.loads(). Python datová struktura řetězce nebo dat JSON.
- raw_decode(o) – Reprezentovat Python slovník jeden po druhém a dekódujte objekt o.
Pomocí metody decode() třídy JSONDecoder můžeme také dekódovat řetězec JSON, jak je znázorněno níže Python Příklad dekodéru 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)
Výstup:
{'colour': ['red', 'yellow']}
Dekódování dat JSON z adresy URL: Příklad ze skutečného života
Načteme data CityBike NYC (systém sdílení kol) ze zadané adresy URL (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) a převést do formátu slovníku.
Python načíst JSON ze souboru Příklad:
POZNÁMKA: Ujistěte se, že knihovna požadavků je již ve vašem počítači nainstalována Python, Pokud ne, otevřete Terminál nebo CMD a zadejte
- (Pro Python 3 nebo vyšší) požadavky na instalaci 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])
Výstup:
<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': '' }
Výjimky související s knihovnou JSON v Python:
- Třída json.JSONDecoderError zpracovává výjimku související s operací dekódování. a je to podtřída ValueError.
- Výjimka - json.JSONDecoderError(msg, doc)
- Parametry výjimky jsou,
- msg – Neformátovaná chybová zpráva
- doc – analyzované dokumenty JSON
- pos – spuštění indexu dokumentu, když selže
- lineno – řádky bez zobrazení odpovídají poz
- dvojtečka – sloupec č odpovídá poz
Python načíst JSON ze souboru Příklad:
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")
Nekonečné a NaN Numbers in Python
Formát JSON Data Interchange Format (RFC – Request For Comments) nepovoluje Infinite nebo Nan Value, ale neexistuje žádné omezení v Python- Knihovna JSON pro provádění operací souvisejících s nekonečnou a hodnotou Nan. Pokud JSON získá INFINITE a datový typ Nan, převede se na doslovný.
Příklad,
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))
Výstup:
Infinity <class 'str'> NaN inf <class 'float'>
Opakovaný klíč v řetězci JSON
RFC určuje, že název klíče by měl být v objektu JSON jedinečný, ale není to povinné. Python Knihovna JSON nevyvolává výjimku opakovaných objektů v JSON. Ignoruje všechny opakované páry klíč–hodnota a bere v úvahu pouze poslední pár klíč–hodnota z nich.
- Příklad,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Výstup:
{'a': 3}
CLI (Command Line Interface) se vstupem JSON Python
json.tool poskytuje rozhraní příkazového řádku pro ověření syntaxe pěkného tisku JSON. Podívejme se na příklad CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Výstup:
{ "name": " Kings Authur " }
Výhody JSON v Python
- Snadný přechod zpět mezi kontejnerem a hodnotou (JSON na Python si Python do JSON)
- Objekt JSON čitelný pro člověka (Docela tisk).
- Široce používané při zpracování dat.
- Nemá stejnou datovou strukturu v jednom souboru.
Omezení implementace JSON v Python
- V deserializátoru rozsahu JSON a predikci čísla
- Maximální délka řetězce JSON a pole JSON a úrovně vnoření objektu.
Python Cheat Sheet JSON
Python Funkce JSON | Description |
---|---|
json.dumps(person_data) | Vytvořte objekt JSON |
json.dump(person_data, file_write) | Vytvořte soubor JSON pomocí File I/O of Python |
compact_obj = json.dumps(data, separators=(',',':')) | Kompaktní objekt JSON odstraněním znaku mezery z objektu JSON pomocí oddělovače |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formátování kódu JSON pomocí odsazení |
sorted_string = json.dumps(x, indent=4, sort_keys=True) | Třídění klíče objektu JSON podle abecedního pořadí |
complex_obj = json.dumps(4 + 5j, default=complex_encode) | Python Komplexní kódování objektů v JSON |
JSONEncoder().encode(color_dict) | Použití třídy JSONEncoder pro serializaci |
json.loads(data_string) | Dekódování řetězce JSON Python slovník pomocí funkce json.loads(). |
json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) | Dekódování složitého objektu JSON do Python |
JSONDecoder().decode(řetězec_barvy) | Použití dekódování JSON na Python s deserializací |