Python JSON: Coderen (dumps), Decoderen (laden) & JSON-bestand lezen
Waar zit JSON in Python?
JSON in Python is een standaardformaat geïnspireerd door JavaScript voor gegevensuitwisseling en gegevensoverdracht als tekstformaat via een netwerk. JSON is over het algemeen in string- of tekstformaat. Het kan worden gebruikt door API's en databases en het vertegenwoordigt objecten als naam/waardeparen. JSON staat voor JavaNotatie van scriptobjecten.
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 een versie bijhouden van JSON Python bibliotheek. Werken met JSON in Python 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 |
---|---|
stortplaatsen() | codering naar JSON-objecten |
dumpen() | gecodeerde tekenreeks die in een bestand wordt geschreven |
ladingen() | Decodeer de JSON-tekenreeks |
laden() | Decodeer terwijl het JSON-bestand wordt gelezen |
Python naar JSON (codering)
JSON Bibliotheek van Python voert de volgende vertaling uit van Python objecten standaard in JSON-objecten
Python | JSON |
---|---|
dict | Object |
lijst | reeks |
unicode | Draad |
getal – int, lang | nummer – int |
drijven | getal – echt |
Waar | Waar |
Niet waar | Niet waar |
Geen | Null |
Het omzetten Python data naar JSON wordt een Encoding-bewerking genoemd. Encoding wordt gedaan met behulp van JSON-bibliotheekmethode – stortplaatsen()
JSON dumpt() in Python
json.dumps() in Python is een methode die woordenboekobjecten converteert van Python naar JSON string data formaat. Het is handig wanneer de objecten in string formaat moeten zijn voor de bewerkingen zoals parsen, printen, etc.
Laten we nu ons eerste json.dumps-coderingsvoorbeeld uitvoeren met 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)
Output:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Laten we een voorbeeld zien van Python schrijf JSON naar bestand voor het maken van een JSON-bestand van het woordenboek met dezelfde functie dumpen()
# 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)
Output:
Niets om te laten zien... In uw systeem is json_file.json gemaakt. U kunt dat bestand controleren zoals weergegeven in de onderstaande schrijf-JSON naar bestand Python voorbeeld.
JSON naar Python (Decodering)
JSON-tekenreeksdecodering gebeurt met behulp van een ingebouwde methode json.loads() & json.load() van JSON-bibliotheek in Python. Hier toont de vertaaltabel een voorbeeld van JSON-objecten Python objecten die handig zijn bij het uitvoeren van decodering Python van JSON-tekenreeks.
JSON | Python |
---|---|
Object | dict |
reeks | lijst |
Draad | unicode |
nummer – int | getal – int, lang |
getal – echt | drijven |
Waar | Waar |
Niet waar | Niet waar |
Null | Geen |
Laten we een eenvoudige parseer-JSON bekijken Python voorbeeld van decoderen 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'))
Output:
{'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 kunnen inlezen Python with Python JSON-voorbeeld parseren:
NOTITIE: Het decoderen van een JSON-bestand is een File Input/Output (I/O) gerelateerde bewerking. Het JSON-bestand moet op uw systeem bestaan op de opgegeven locatie die u in uw programma vermeldt.
Python JSON-bestand lezen 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 lees-JSON-bestand Python voorbeeld.
Output:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Compacte codering in Python
Wanneer u de grootte van uw JSON-bestand wilt verkleinen, kunt u compacte codering gebruiken Python.
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)
Output:
'["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 afdruk)
- Het doel is om goed opgemaakte 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)
Output:
{ "a" : 4, "b" : 5 }
Om dit beter te begrijpen, wijzigt u de inspringing in 40 en observeert u de uitvoer-
De JSON-code bestellen:
sorteer_sleutels attribuut in Python Het argument van de dumps-functie sorteert de sleutel in JSON in oplopende volgorde. Het argument sort_keys is een Booleaans kenmerk. Als het waar is, is sorteren toegestaan, anders niet. Laten we het 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)
Output:
{ "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 wellicht ziet, 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 die
- Echt deel
- Denkbeeldig deel
Voorbeeld: 3 +2i
Voordat u codering van een complex object uitvoert, 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 instancemethode.
Laten we een specifieke functie maken om te controleren of een object complex is of geschikt is 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)
Output:
'[4.0, 5.0]'
Complexe JSON-objectdecodering in Python
Om complexe objecten in JSON te decoderen, gebruikt u een object_hook-parameter die controleert of de JSON-string het complexe object bevat of niet. Laten we 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)
Output:
Complex_object...... (4+5j) Without_complex_object...... {'real': 6, 'img': 7}
Overzicht van JSON-serialisatieklasse JSONEncoder
De JSONEncoder-klasse wordt gebruikt voor de serialisatie van elk Python object tijdens het coderen. Het bevat drie verschillende coderingsmethoden
- standaard(o) – Geïmplementeerd in de subklasse en retourneert serialize-object voor o voorwerp.
- coderen(o) – Hetzelfde als JSON-dumps Python methode retourneert JSON-tekenreeks van Python data structuur.
- iterencode(o) – Geef string één voor één weer en codeer object o.
Met behulp van de methode encode() van de klasse JSONEncoder kunnen we ook elk bestand coderen Python object zoals hieronder weergegeven Python Voorbeeld van JSON-encoder.
# 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)
Output:
'{"colour": ["red", "yellow", "green"]}'
Overzicht van JSON-deserialisatieklasse JSONDecoder
De JSONDecoder-klasse wordt gebruikt voor deserialisatie van elk type Python object tijdens het decoderen. Het bevat drie verschillende decoderingsmethoden
- standaard(o) – Geïmplementeerd in de subklasse en retourneert gedeserialiseerd object o voorwerp.
- decoderen(o) – Hetzelfde als de methode return json.loads(). Python gegevensstructuur van JSON-tekenreeks of gegevens.
- raw_decode(o) – Vertegenwoordigen Python woordenboek één voor één en decodeer object o.
Met behulp van de decode()-methode van de JSONDecoder-klasse kunnen we ook de JSON-tekenreeks decoderen, zoals hieronder weergegeven Python Voorbeeld van een JSON-decoder.
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)
Output:
{'colour': ['red', 'yellow']}
JSON-gegevens decoderen van URL: voorbeeld uit het echte leven
We halen gegevens van CityBike NYC (Bike Sharing System) op van de opgegeven URL (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) en converteer naar woordenboekformaat.
Python laad JSON uit bestand Voorbeeld:
OPMERKING:- Zorg ervoor dat de bibliotheek met verzoeken al in uw Python, 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://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])
Output:
<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.JSONDecoderFout behandelt de uitzondering met betrekking tot de decoderingsbewerking. en het is een subklasse van Waardefout.
- Uitzondering - json.JSONDecoderError(msg, doc)
- Uitzonderingsparameters zijn,
- msg – Niet-geformatteerde foutmelding
- doc – JSON-documenten geparseerd
- pos – start de index van het document als het mislukt is
- lineno – regelnr. komt overeen met pos
- dubbele punt – kolom nr. komt overeen met pos
Python laad 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")
Oneindig en NaN Numbers in Python
JSON Data Interchange Format (RFC – Request For Comments) staat geen oneindige of nan-waarde toe, maar er is geen beperking in Python- JSON-bibliotheek om Infinite en Nan Value gerelateerde bewerkingen uit te voeren. Als JSON INFINITE en Nan datatype 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))
Output:
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 dit is niet verplicht. Python De JSON-bibliotheek genereert geen uitzondering voor herhaalde objecten in JSON. Het negeert alle herhaalde sleutel-waardeparen en houdt alleen rekening met het laatste sleutel-waardepaar.
- Voorbeeld,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
Output:
{'a': 3}
CLI (opdrachtregelinterface) met JSON erin 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
Output:
{ "name": " Kings Authur " }
Voordelen van JSON in Python
- Gemakkelijk 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 de JSON-tekenreeks en arrays van JSON en nestniveaus van objecten.
Python JSON-spiekbriefje
Python JSON-functie | Beschrijving |
---|---|
json.dumps(person_data) | JSON-object maken |
json.dump(person_data, file_write) | Maak een JSON-bestand met behulp van File I/O of Python |
compact_obj = json.dumps(data, separators=(',',':')) | Compact JSON-object door het spatieteken uit het JSON-object te verwijderen met behulp van een scheidingsteken |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | JSON-code opmaken met Inspringen |
gesorteerde_string = json.dumps(x, inspringen=4, sort_keys=True) | JSON-objectsleutel sorteren op alfabetische volgorde |
complex_obj = json.dumps(4 + 5j, standaard=complex_encode) | Python Complexe objectcodering in JSON |
JSONEncoder().encode(color_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__”: waar, “echt”: 4, “img”: 5}', object_hook = is_complex) | Decodering van complexe JSON-objecten naar Python |
JSONDecoder().decode(kleur_string) | Gebruik van het decoderen van JSON om Python met deserialisatie |