Python JSON: Encode(dumps), Decode(loads) & Read JSON File
Hvad er JSON i Python?
JSON in Python er et standardformat inspireret af JavaScript til dataudveksling og dataoverførsel som tekstformat over et netværk. Generelt er JSON i streng- eller tekstformat. Det kan bruges af API'er og databaser, og det repræsenterer objekter som navn/værdi-par. JSON står for JavaScriptobjektnotation.
Python JSON syntaks:
JSON er skrevet som nøgle- og værdipar.
{
"Key": "Value",
"Key": "Value",
}
JSON minder meget om Python ordbog. Python understøtter JSON, og det har et indbygget bibliotek som en JSON.
JSON bibliotek i Python
'marskal' og 'pickle' eksterne moduler af Python vedligeholde en version af JSON Python bibliotek. Arbejder med JSON i Python for at udføre JSON-relaterede operationer som kodning og afkodning, skal du først importere JSON-bibliotek og for det i din .py fil,
import json
Følgende metoder er tilgængelige i JSON Python modul
| Metode | Produktbeskrivelse |
|---|---|
| dumper() | kodning til JSON-objekter |
| dump() | kodet strengskrivning på fil |
| indlæser() | Afkode JSON-strengen |
| belastning() | Afkod, mens JSON-fil læst |
Python til JSON (kodning)
JSON Bibliotek af Python udfører følgende oversættelse af Python objekter ind i JSON-objekter som standard
| Python | JSON |
|---|---|
| dict | Object |
| liste | Array |
| unicode | String |
| nummer – int, lang | nummer – int |
| flyde | tal – reelt |
| Sand | Sand |
| False | False |
| Ingen | Null |
Konvertering Python data til JSON kaldes en kodningsoperation. Kodning udføres ved hjælp af JSON-biblioteksmetoden - dumper()
JSON dumper() ind Python
json.dumps() in Python er en metode, der konverterer ordbogsobjekter af Python i JSON-strengdataformat. Det er nyttigt, når objekterne skal være i strengformat til operationer som parsing, udskrivning osv.
Lad os nu udføre vores første json.dumps-kodningseksempel med 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}})
Lad os se et eksempel på Python skriv JSON til fil for at oprette en JSON-fil i ordbogen ved hjælp af den samme funktion 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)
Output:
Intet at vise...I dit system oprettes json_file.json. Du kan kontrollere den fil som vist i nedenstående skriv JSON til fil Python eksempel.
JSON til Python (Afkodning)
JSON streng afkodning udføres ved hjælp af indbygget metode json.loads() & json.load() af JSON-biblioteket i Python. Her viser oversættelsestabel et eksempel på JSON-objekter til Python objekter som er nyttige at udføre afkodning i Python af JSON-strengen.
| JSON | Python |
|---|---|
| Object | dict |
| Array | liste |
| String | unicode |
| nummer – int | nummer – int, lang |
| tal – reelt | flyde |
| Sand | Sand |
| False | False |
| Null | Ingen |
Lad os se en grundlæggende parse JSON Python eksempel på afkodning ved hjælp af json.loads fungere,
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'}
Afkodning af JSON-fil eller parsing af JSON-fil Python
Nu vil vi lære, hvordan man læser JSON-fil ind Python med Python parse JSON eksempel:
BEMÆRK VENLIGST: Afkodning af JSON-fil er File Input/Output (I/O)-relateret operation. JSON-filen skal eksistere på dit system på den angivne placering, som du nævner i dit program.
Python læs JSON fil Eksempel:
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)
Her data er et ordbogsobjekt for Python som vist i ovenstående læs JSON-fil Python eksempel.
Output:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakt indkodning Python
Når du skal reducere størrelsen på din JSON-fil, kan du bruge kompakt indkodning Python.
Eksempel,
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 **
Formater JSON-kode (temmelig print)
- Målet er at skrive velformateret kode til menneskelig forståelse. Ved hjælp af smuk udskrivning kan enhver let forstå koden.
Eksempel:
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
}
For bedre at forstå dette skal du ændre indrykning til 40 og observere output-
Bestilling af JSON-koden:
sort_nøgler attribut i Python dumps-funktionens argument vil sortere nøglen i JSON i stigende rækkefølge. Argumentet sort_keys er en boolesk attribut. Når det er sandt, er sortering tilladt ellers ikke. Lad os forstå med Python streng til JSON sorteringseksempel.
Eksempel,
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"
]
}
Som du kan se, er nøglernes alder, biler, børn osv. arrangeret i stigende rækkefølge.
Kompleks objektkodning af Python
Et komplekst objekt har to forskellige dele, dvs
- Virkelig del
- imaginær del
Eksempel: 3 +2i
Før du udfører kodning af et komplekst objekt, skal du kontrollere, at en variabel er kompleks eller ej. Du skal oprette en funktion, som kontrollerer værdien gemt i en variabel ved at bruge en instansmetode.
Lad os skabe den specifikke funktion for at kontrollere objektet er komplekst eller berettiget til kodning.
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]'
Kompleks JSON-objektafkodning ind Python
For at afkode komplekst objekt i JSON skal du bruge en object_hook-parameter, som kontrollerer, at JSON-strengen indeholder det komplekse objekt eller ej. Lad os forstå med streng til JSON Python Eksempel,
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}
Oversigt over JSON Serialization class JSONEncoder
JSONEncoder-klassen bruges til serialisering af evt Python objekt, mens du udfører kodning. Den indeholder tre forskellige metoder til kodning, som er
- default(o) – Implementeret i underklassen og returnerer serialiseringsobjektet til o objekt.
- indkode(o) – Samme som JSON-dumps Python metode returnerer JSON-streng af Python datastruktur.
- iterencode(o) – Repræsenter streng én efter én og indkod objekt o.
Ved hjælp af encode()-metoden i JSONEncoder-klassen kan vi også kode enhver Python objekt som vist i nedenstående Python Eksempel på JSON-koder.
# 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"]}'
Oversigt over JSON Deserialization klasse JSONDecoder
JSONDecoder klasse bruges til deserialisering af evt Python objekt, mens du udfører afkodning. Den indeholder tre forskellige metoder til afkodning, som er
- default(o) – Implementeret i underklassen og returnerer deserialiseret objekt o objekt.
- afkode(o) – Samme som json.loads() metode returnerer Python datastruktur af JSON-streng eller data.
- raw_decode(o) – Repræsentere Python ordbog én efter én og afkode objekt o.
Ved hjælp af decode()-metoden i JSONDecoder-klassen kan vi også afkode JSON-strengen som vist nedenfor Python JSON-dekoder eksempel.
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']}
Afkodning af JSON-data fra URL: Eksempel fra det virkelige liv
Vi vil hente data fra CityBike NYC (Bike Sharing System) fra specificeret URL(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) og konverter til ordbogsformat.
Python indlæs JSON fra fil Eksempel:
BEMÆRK:- Sørg for, at anmodningsbiblioteket allerede er installeret i din Python, Hvis ikke, så åbn Terminal eller CMD og skriv
- (Til Python 3 eller højere) pip3 installationsanmodninger
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': ''
}
Undtagelser relateret til JSON Library i Python:
- Klasse json.JSONDecoderError håndterer undtagelsen relateret til afkodningsoperation. og det er en underklasse af ValueError.
- Undtagelse – json.JSONDecoderError(msg, doc)
- Undtagelsesparametre er,
- msg – Uformateret fejlmeddelelse
- doc – JSON-dokumenter parset
- pos – start indekset for dokumentet, når det mislykkedes
- lineno – line no shows svarer til pos
- kolon – kolonne nr. svarer til pos
Python indlæs JSON fra fil Eksempel:
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")
Infinite og NaN Numbers in Python
JSON Data Interchange Format (RFC – Request For Comments) tillader ikke Infinite eller Nan Value, men der er ingen begrænsning i Python- JSON Library til at udføre Infinite og Nan Value-relateret operation. Hvis JSON får INFINITE og Nan datatype, bliver den konverteret til bogstavelig.
Eksempel,
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'>
Gentaget nøgle i JSON String
RFC angiver, at nøglenavnet skal være unikt i et JSON-objekt, men det er ikke obligatorisk. Python JSON-biblioteket rejser ikke en undtagelse af gentagne objekter i JSON. Den ignorerer alle gentagne nøgleværdi-par og tager kun hensyn til det sidste nøgleværdi-par blandt dem.
- Eksempel,
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
Output:
{'a': 3}
CLI (Command Line Interface) med JSON ind Python
json.værktøj giver kommandolinjegrænsefladen til at validere JSON pretty-print syntaks. Lad os se et eksempel på CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Output:
{
"name": " Kings Authur "
}
Fordele ved JSON i Python
- Let at flytte tilbage mellem container og værdi (JSON til Python og Python til JSON)
- Menneskeligt læsbart (pretty-print) JSON-objekt
- Udbredt i datahåndtering.
- Har ikke den samme datastruktur i den enkelte fil.
Implementeringsbegrænsninger af JSON i Python
- I deserializer af JSON-rækkevidde og forudsigelse af et tal
- Den maksimale længde af JSON-streng og arrays af JSON og indlejringsniveauer af objekt.
Python JSON snydeark
| Python JSON funktion | Produktbeskrivelse |
|---|---|
| json.dumps(person_data) | Opret JSON-objekt |
| json.dump(person_data, file_write) | Opret JSON-fil ved hjælp af File I/O af Python |
| compact_obj = json.dumps(data, separators=(',',':')) | Kompakt JSON-objekt ved at fjerne mellemrumstegn fra JSON-objekt ved hjælp af separator |
| formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formatering af JSON-kode ved hjælp af indrykning |
| sorted_string = json.dumps(x, indent=4, sort_keys=True) | Sortering af JSON-objektnøgle efter alfabetisk rækkefølge |
| complex_obj = json.dumps(4 + 5j, default=complex_encode) | Python Kompleks objektkodning i JSON |
| JSONEncoder().encode(colour_dict) | Brug af JSONEncoder Class til serialisering |
| json.loads(data_streng) | Afkodning af JSON-streng ind Python ordbog ved hjælp af funktionen json.loads(). |
| json.loads('{“__complex__”: sand, “real”: 4, “img”: 5}', object_hook = is_complex) | Afkodning af komplekst JSON-objekt til Python |
| JSONDecoder().decode(farvestreng) | Brug af afkodning af JSON til Python med deserialisering |








