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.

Python JSON-coderingsvoorbeeld

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

Python JSON-decoderingsvoorbeeld

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

JSON-bestand parseren in Python

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
}

Formaat JSON-code Voorbeeld

Om dit beter te begrijpen, wijzigt u de inspringing in 40 en observeert u de uitvoer-

Formaat JSON-code Voorbeeld

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

  1. Echt deel
  2. Denkbeeldig deel

Complexe objectcodering van Python

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

JSON-bibliotheek in Python

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

Commandoregelinterface met JSON

$ 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