Python JSON:coderen (dumps), decoderen (laden) &JSON-bestand lezen
Wat is JSON in Python?
JSON in Python is een standaardformaat geïnspireerd op JavaScript voor gegevensuitwisseling en gegevensoverdracht als tekstformaat via een netwerk. Over het algemeen is JSON in tekenreeks- of tekstindeling. Het kan worden gebruikt door API's en databases, en het vertegenwoordigt objecten als naam/waarde-paren. JSON staat voor JavaScript Object Notation.
Python JSON-syntaxis:
JSON wordt geschreven als sleutel- en waardepaar.
{ "Key": "Value", "Key": "Value", }
JSON lijkt erg op Python-woordenboek. Python ondersteunt JSON en heeft een ingebouwde bibliotheek als JSON.
JSON-bibliotheek in Python
'maarschalk ' en 'augurk' externe modules van Python onderhouden een versie van JSON Python-bibliotheek. Als u met JSON in Python werkt om JSON-gerelateerde bewerkingen uit te voeren, zoals coderen en decoderen, moet u eerst importeren JSON-bibliotheek en daarvoor in uw .py bestand,
import json
De volgende methoden zijn beschikbaar in de JSON Python-module
Methode | Beschrijving |
---|---|
dumps() | codering naar JSON-objecten |
dump() | gecodeerde tekenreeks naar bestand |
laadt() | Decodeer de JSON-tekenreeks |
load() | Decoderen terwijl het JSON-bestand wordt gelezen |
Python naar JSON (codering)
JSON Library of Python voert standaard de volgende vertaling uit van Python-objecten naar JSON-objecten
Python | JSON |
---|---|
dict | Object |
lijst | Array |
unicode | String |
getal – int, lang | nummer – int |
zweven | getal – echt |
Waar | Waar |
Onwaar | Fout |
Geen | Null |
Het converteren van Python-gegevens naar JSON wordt een coderingsbewerking genoemd. De codering wordt gedaan met behulp van de JSON-bibliotheekmethode - dumps()
JSON dumpt() in Python
json.dumps() in Python is een methode die woordenboekobjecten van Python omzet in JSON-tekenreeksgegevensformaat. Het is handig wanneer de objecten in tekenreeksformaat moeten zijn voor bewerkingen zoals parseren, afdrukken, enz.
Laten we nu ons eerste json.dumps-coderingsvoorbeeld met Python uitvoeren:
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)
Uitvoer:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Laten we een voorbeeld bekijken van Python die JSON naar een bestand schrijft om een JSON-bestand van het woordenboek te maken met dezelfde functie 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)
Uitvoer:
Niets om te laten zien... In uw systeem wordt json_file.json aangemaakt. U kunt dat bestand controleren zoals weergegeven in het onderstaande voorbeeld van een schrijf-JSON naar Python-bestand.
JSON naar Python (decodering)
JSON-tekenreeksdecodering wordt gedaan met behulp van de ingebouwde methode json.loads() &json.load() van de JSON-bibliotheek in Python. Hier toont de vertaaltabel een voorbeeld van JSON-objecten naar Python-objecten die handig zijn om decodering in Python van JSON-tekenreeks uit te voeren.
JSON | Python |
---|---|
Object | dict |
Array | lijst |
String | unicode |
nummer – int | getal – int, lang |
getal – echt | zweven |
Waar | Waar |
Onwaar | Fout |
Null | Geen |
Laten we een eenvoudig JSON-python-voorbeeld van decodering bekijken met behulp van json.loads functie,
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'))
Uitvoer:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
JSON-bestand decoderen of JSON-bestand parseren in Python
Nu zullen we leren hoe we het JSON-bestand in Python kunnen lezen met het Python-parse JSON-voorbeeld:
OPMERKING: Het decoderen van het JSON-bestand is een aan File Input/Output (I/O) gerelateerde bewerking. Het JSON-bestand moet op uw systeem aanwezig zijn op de opgegeven locatie die u in uw programma vermeldt.
Python leest JSON-bestand Voorbeeld:
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)
Hier gegevens is een woordenboekobject van Python, zoals weergegeven in het bovenstaande voorbeeld van het gelezen JSON-bestand Python.
Uitvoer:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Compacte codering in Python
Als u de grootte van uw JSON-bestand wilt verkleinen, kunt u compacte codering in Python gebruiken.
Voorbeeld,
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)
Uitvoer:
'["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 **
Formaat JSON-code (mooie print)
- Het doel is om goed geformatteerde code te schrijven voor menselijk begrip. Met behulp van mooie afdrukken kan iedereen de code gemakkelijk begrijpen.
Voorbeeld:
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)
Uitvoer:
{ "a" : 4, "b" : 5 }
Om dit beter te begrijpen, wijzigt u de inspringing in 40 en bekijkt u de uitvoer-
De JSON-code bestellen:
sort_keys attribuut in Python dumps function's argument sorteert de sleutel in JSON in oplopende volgorde. Het argument sort_keys is een Booleaans attribuut. Als het waar is, is sorteren toegestaan, anders niet. Laten we het eens begrijpen met Python-string naar JSON-sorteervoorbeeld.
Voorbeeld,
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)
Uitvoer:
{ "age": 45, "cars": [ { "model": "Audi A1", "mpg": 15.1 }, { "model": "Zeep Compass", "mpg": 18.1 } ], "children": [ "Alice", "Bob" ], "married": true, "name": "Ken", "pets": [ "Dog" ] }
Zoals u kunt zien, zijn de leeftijd van de sleutels, auto's, kinderen, enz. in oplopende volgorde gerangschikt.
Complexe objectcodering van Python
Een Complex object heeft twee verschillende delen, namelijk
- Echt deel
- Imaginair deel
Voorbeeld:3 +2i
Voordat u een complex object codeert, moet u controleren of een variabele complex is of niet. U moet een functie maken die de waarde controleert die is opgeslagen in een variabele met behulp van een instantiemethode.
Laten we de specifieke functie maken voor het controleren van objecten die complex zijn of in aanmerking komen voor codering.
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)
Uitvoer:
'[4.0, 5.0]'
Complexe JSON-objectdecodering in Python
Om een complex object in JSON te decoderen, gebruikt u een parameter object_hook die controleert of de JSON-tekenreeks het complexe object bevat of niet. Laten we het begrijpen met string naar JSON Python-voorbeeld,
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)
Uitvoer:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Overzicht van JSON-serialisatieklasse JSONEncoder
De JSONEncoder-klasse wordt gebruikt voor serialisatie van elk Python-object tijdens het uitvoeren van codering. Het bevat drie verschillende coderingsmethoden die zijn
- standaard(o) – Geïmplementeerd in de subklasse en return serialize object voor o voorwerp.
- coderen(o) - Hetzelfde als JSON dumpt Python-methode retourneert JSON-tekenreeks van Python-gegevensstructuur.
- iterencode(o) – Vertegenwoordig string één voor één en codeer object o.
Met behulp van de methode encode() van de JSONEncoder-klasse, kunnen we ook elk Python-object coderen, zoals weergegeven in het onderstaande Python JSON-encodervoorbeeld.
# 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)
Uitvoer:
'{"colour": ["red", "yellow", "green"]}'
Overzicht van JSON-deserialisatieklasse JSONDecoder
De JSONDecoder-klasse wordt gebruikt voor deserialisatie van elk Python-object tijdens het decoderen. Het bevat drie verschillende decoderingsmethoden die zijn
- standaard(o) – Geïmplementeerd in de subklasse en geeft gedeserialiseerd object terug o voorwerp.
- decoderen(o) – Zelfde als json.loads() methode retourneert Python datastructuur van JSON string of data.
- raw_decode(o) – Vertegenwoordig het Python-woordenboek één voor één en decodeer object o.
Met behulp van de methode decode() van de JSONDecoder-klasse, kunnen we ook de JSON-tekenreeks decoderen, zoals weergegeven in het onderstaande Python JSON-decodervoorbeeld.
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)
Uitvoer:
{'colour': ['red', 'yellow']}
JSON-gegevens decoderen van URL:voorbeeld uit de praktijk
We halen de gegevens van CityBike NYC (Bike Sharing System) op van de opgegeven URL (https://feeds.citibikenyc.com/stations/stations.json) en zetten deze om in woordenboekformaat.
Python laadt JSON uit bestand Voorbeeld:
OPMERKING:- Zorg ervoor dat de aanvraagbibliotheek al in uw Python is geïnstalleerd. Zo niet, open dan Terminal of CMD en typ
- (Voor Python 3 of hoger) pip3-installatieverzoeken
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://feeds.citibikenyc.com/stations/stations.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])
Uitvoer:
<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': '' }
Uitzonderingen gerelateerd aan JSON-bibliotheek in Python:
- Klasse json.JSONDecoderError behandelt de uitzondering met betrekking tot decoderingsbewerking. en het is een subklasse van ValueError.
- Uitzondering – json.JSONDecoderError(msg, doc)
- Uitzonderingsparameters zijn,
- msg – Ongeformatteerde foutmelding
- doc – JSON-documenten geparseerd
- pos – start index van doc wanneer het is mislukt
- lineno – regel geen shows komen overeen met pos
- dubbele punt – kolom komt niet overeen met pos
Python laadt JSON uit bestand Voorbeeld:
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")
Oneindige en NaN-getallen in Python
JSON Data Interchange Format (RFC – Request For Comments) staat geen Infinite of Nan Value toe, maar er is geen beperking in Python-JSON Library om Infinite en Nan Value-gerelateerde bewerkingen uit te voeren. Als JSON het gegevenstype INFINITE en Nan krijgt, wordt het omgezet naar letterlijk.
Voorbeeld,
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))
Uitvoer:
Infinity <class 'str'> NaN inf <class 'float'>
Herhaalde sleutel in JSON String
RFC geeft aan dat de sleutelnaam uniek moet zijn in een JSON-object, maar het is niet verplicht. Python JSON-bibliotheek roept geen uitzondering op voor herhaalde objecten in JSON. Het negeert alle herhaalde sleutel-waarde-paren en houdt alleen rekening met het laatste sleutel-waarde-paar.
- Voorbeeld,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Uitvoer:
{'a': 3}
CLI (Command Line Interface) met JSON in Python
json.tool biedt de opdrachtregelinterface om de JSON pretty-print-syntaxis te valideren. Laten we een voorbeeld van CLI bekijken
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Uitvoer:
{ "name": " Kings Authur " }
Voordelen van JSON in Python
- Eenvoudig terug te schakelen tussen container en waarde (JSON naar Python en Python naar JSON)
- Voor mensen leesbaar (Pretty-print) JSON-object
- Veel gebruikt bij gegevensverwerking.
- Heeft niet dezelfde gegevensstructuur in het enkele bestand.
Implementatiebeperkingen van JSON in Python
- In deserializer van JSON-bereik en voorspelling van een getal
- De maximale lengte van JSON-tekenreeksen en arrays van JSON en nestingniveaus van objecten.
Python JSON-spiekbriefje
Python JSON-functie | Beschrijving |
---|---|
json.dumps(person_data) | JSON-object maken |
json.dump(person_data, file_write) | JSON-bestand maken met behulp van bestands-I/O van Python |
compact_obj =json.dumps(data, separators=(‘,’,’:’)) | Compact JSON-object door spatie uit JSON-object te verwijderen met behulp van scheidingsteken |
formatted_obj =json.dumps(dic, indent=4, separators=(‘,’, ‘:‘)) | JSON-code opmaken met Indent |
sorted_string =json.dumps(x, indent=4, sort_keys=True) | JSON-objectsleutel sorteren op alfabetische volgorde |
complex_obj =json.dumps(4 + 5j, default=complex_encode) | Python Complex Object-codering in JSON |
JSONEncoder().encode(colour_dict) | Gebruik van JSONEncoder-klasse voor serialisatie |
json.loads(data_string) | JSON-tekenreeks decoderen in Python-woordenboek met de functie json.loads() |
json.loads(‘{“__complex__”:true, “real”:4, “img”:5}’, object_hook =is_complex) | Decodering van complex JSON-object naar Python |
JSONDecoder().decode(colour_string) | Gebruik van decodering van JSON naar Python met deserialisatie |
Python
- Python-gegevenstypen
- Python-operators
- Python while Loop
- Python pass-instructie
- Python-functies
- Python-functieargumenten
- Python-woordenboek
- Python-bestand I/O
- Java BufferedReader:hoe een bestand in Java te lezen met voorbeeld
- Python controleren of bestand bestaat | Hoe te controleren of er een directory bestaat in Python
- Python - Bestanden I/O