Python JSON: Encode(dumps), Decode(loads) & Les JSON File
Hva er JSON i Python?
JSON in Python er et standardformat inspirert av JavaSkript for datautveksling og dataoverfรธring som tekstformat over et nettverk. Vanligvis er JSON i streng- eller tekstformat. Den kan brukes av APIer og databaser, og den representerer objekter som navn/verdi-par. JSON stรฅr for JavaSkriptobjektnotasjon.
Python JSON-syntaks:
JSON er skrevet som nรธkkel- og verdipar.
{
"Key": "Value",
"Key": "Value",
}
JSON er veldig lik Python ordbok. Python stรธtter JSON, og den har et innebygd bibliotek som en JSON.
JSON-biblioteket i Python
'marshal'og'pickle' eksterne moduler av Python opprettholde en versjon av JSON Python bibliotek. Jobber med JSON i Python for รฅ utfรธre JSON-relaterte operasjoner som koding og dekoding, mรฅ du fรธrst importere JSON-biblioteket og for det i din .py fil,
import json
Fรธlgende metoder er tilgjengelige i JSON Python moduler
| Metode | Tekniske beskrivelser |
|---|---|
| dumper() | koding til JSON-objekter |
| dump() | kodet streng som skrives pรฅ fil |
| laster() | Dekod JSON-strengen |
| laste() | Dekod mens JSON-filen leses |
Python til JSON (koding)
JSON Bibliotek av Python utfรธrer fรธlgende oversettelse av Python objekter inn i JSON-objekter som standard
| Python | JSON |
|---|---|
| diktere | Objekt |
| liste | Array |
| unicode | String |
| tall โ int, lang | nummer โ int |
| flyte | tall โ ekte |
| ekte | ekte |
| Falsk | Falsk |
| none | Null |
konvertering Python data til JSON kalles en kodingsoperasjon. Koding gjรธres ved hjelp av JSON-bibliotekmetoden - dumper()
JSON dumper() inn Python
json.dumps() in Python er en metode som konverterer ordbokobjekter av Python til JSON-strengdataformat. Det er nyttig nรฅr objektene mรฅ vรฆre i strengformat for operasjoner som parsing, utskrift osv.
La oss nรฅ utfรธre vรฅrt fรธrste json.dumps-kodingseksempel 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)
Utgang:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
La oss se et eksempel pรฅ Python skriv JSON til fil for รฅ lage en JSON-fil av ordboken med samme funksjon 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)
Utgang:
Ingenting รฅ vise...I systemet ditt er json_file.json opprettet. Du kan sjekke den filen som vist i skriv JSON til fil nedenfor Python eksempel.
JSON til Python (Dekoding)
JSON-strengdekoding gjรธres ved hjelp av den innebygde metoden json.loads() & json.load() av JSON-biblioteket i Python. Her viser oversettelsestabellen eksempel pรฅ JSON-objekter til Python gjenstander som er nyttige รฅ utfรธre dekoding i Python av JSON-strengen.
| JSON | Python |
|---|---|
| Objekt | diktere |
| Array | liste |
| String | unicode |
| nummer โ int | tall โ int, lang |
| tall โ ekte | flyte |
| ekte | ekte |
| Falsk | Falsk |
| Null | none |
La oss se en grunnleggende parse JSON Python eksempel pรฅ avkoding ved hjelp av json.loads funksjon,
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'))
Utgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}
Dekoder JSON-fil eller analyserer JSON-fil inn Python
Nรฅ skal vi lรฆre hvordan du leser JSON-filen Python med Python parse JSON eksempel:
NOTAT: Dekoding av JSON-fil er filinngang/utgang (I/O) relatert operasjon. JSON-filen mรฅ eksistere pรฅ systemet ditt pรฅ det spesifiserte stedet du nevner i programmet.
Python les 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 ordbokobjekt av Python som vist i den ovenfor lese JSON-filen Python eksempel.
Utgang:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompakt koding inn Python
Nรฅr du trenger รฅ redusere stรธrrelsen pรฅ JSON-filen din, kan du bruke kompakt koding inn 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)
Utgang:
'["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 (pen utskrift)
- Mรฅlet er รฅ skrive godt formatert kode for menneskelig forstรฅelse. Ved hjelp av pen utskrift kan alle enkelt 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)
Utgang:
{
"a" : 4,
"b" : 5
}
For bedre รฅ forstรฅ dette, endre innrykk til 40 og observer utdata-
Bestilling av JSON-koden:
sorteringsnรธkler attributt i Python dumps-funksjonens argument vil sortere nรธkkelen i JSON i stigende rekkefรธlge. Sort_keys-argumentet er et boolsk attributt. Nรฅr det er sant er sortering tillatt ellers ikke. La oss 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)
Utgang:
{
"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 kanskje ser, er nรธklenes alder, biler, barn osv. ordnet i stigende rekkefรธlge.
Kompleks objektkoding av Python
Et komplekst objekt har to forskjellige deler, dvs
- Virkelig del
- Fantasifull del
Eksempel: 3 +2i
Fรธr du utfรธrer koding av et komplekst objekt, mรฅ du sjekke at en variabel er kompleks eller ikke. Du mรฅ lage en funksjon som kontrollerer verdien som er lagret i en variabel ved รฅ bruke en instansmetode.
La oss lage den spesifikke funksjonen for sjekk objektet er komplekst eller kvalifisert for koding.
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)
Utgang:
'[4.0, 5.0]'
Kompleks JSON-objekt dekoding inn Python
For รฅ dekode komplekst objekt i JSON, bruk en object_hook-parameter som sjekker at JSON-strengen inneholder det komplekse objektet eller ikke. La oss 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)
Utgang:
Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}
Oversikt over JSON Serialization class JSONEncoder
JSONEncoder-klassen brukes for serialisering av evt Python objekt mens du utfรธrer koding. Den inneholder tre forskjellige metoder for koding som er
- standard(o) โ Implementert i underklassen og returner serialize-objektet for o gjenstand.
- kode(o) โ Samme som JSON-dumper Python metode returnerer JSON-streng av Python data struktur.
- iterencode(o) โ Representer streng รฉn etter รฉn og kod objekt o.
Ved hjelp av encode()-metoden til JSONEncoder-klassen kan vi ogsรฅ kode alle Python objekt som vist nedenfor 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)
Utgang:
'{"colour": ["red", "yellow", "green"]}'
Oversikt over JSON-deserialiseringsklassen JSONDecoder
JSONDecoder-klassen brukes for deserialisering av evt Python objekt mens du utfรธrer dekoding. Den inneholder tre forskjellige metoder for dekoding som er
- standard(o) โ Implementert i underklassen og returnerer deserialisert objekt o gjenstand.
- dekode(o) โ Samme som json.loads()-metoden returnerer Python datastrukturen til JSON-strengen eller data.
- rรฅ_dekode(o) โ Representere Python ordbok en etter en og dekode objekt o.
Ved hjelp av decode() metoden til JSONDecoder-klassen, kan vi ogsรฅ dekode JSON-strengen som vist nedenfor Python Eksempel pรฅ JSON-dekoder.
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)
Utgang:
{'colour': ['red', 'yellow']}
Dekoding av JSON-data fra URL: Eksempel fra det virkelige liv
Vi vil hente data fra CityBike NYC (Bike Sharing System) fra spesifisert URL(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) og konverter til ordbokformat.
Python last inn JSON fra fil Eksempel:
MERK:- Sรธrg for at forespรธrselsbiblioteket allerede er installert i din Python, Hvis ikke, รฅpne Terminal eller CMD og skriv
- (Til Python 3 eller hรธyere) pip3 installasjonsforespรธrsler
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])
Utgang:
<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': ''
}
Unntak relatert til JSON Library i Python:
- Klasse json.JSONDecoderError hรฅndterer unntaket knyttet til dekodingsoperasjon. og det er en underklasse av ValueError.
- Unntak โ json.JSONDecoderError(msg, doc)
- Parametre for unntak er,
- msg โ Uformatert feilmelding
- doc โ JSON-dokumenter analysert
- pos โ start indeksen til dokumentet nรฅr det mislyktes
- lineno โ line no show tilsvarer pos
- kolon โ kolonnenr tilsvarer pos
Python last inn 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) tillater ikke Infinite eller Nan Value, men det er ingen begrensning i Python- JSON Library for รฅ utfรธre Infinite og Nan Value relatert operasjon. Hvis JSON fรฅr INFINITE og Nan datatype, blir den konvertert til bokstavelig.
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))
Utgang:
Infinity <class 'str'> NaN inf <class 'float'>
Gjentatt nรธkkel i JSON-streng
RFC angir at nรธkkelnavnet skal vรฆre unikt i et JSON-objekt, men det er ikke obligatorisk. Python JSON-biblioteket tar ikke opp et unntak for gjentatte objekter i JSON. Den ignorerer alle gjentatte nรธkkelverdi-par og tar kun hensyn til det siste nรธkkelverdi-paret blant dem.
- Eksempel,
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
Utgang:
{'a': 3}
CLI (Command Line Interface) med JSON inn Python
json.tool gir kommandolinjegrensesnittet for รฅ validere JSON pretty-print-syntaks. La oss se et eksempel pรฅ CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Utgang:
{
"name": " Kings Authur "
}
Fordeler med JSON i Python
- Enkelt รฅ flytte tilbake mellom container og verdi (JSON til Python og Python til JSON)
- Menneskelig lesbart (pretty-print) JSON-objekt
- Mye brukt i datahรฅndtering.
- Har ikke samme datastruktur i enkeltfilen.
Implementeringsbegrensninger for JSON i Python
- I deserializer av JSON-omrรฅde og prediksjon av et tall
- Maksimal lengde pรฅ JSON-streng og arrays av JSON og neste nivรฅer av objekt.
Python JSON-jukseark
| Python JSON-funksjon | Tekniske beskrivelser |
|---|---|
| json.dumps(person_data) | Opprett JSON-objekt |
| json.dump(person_data, file_write) | Opprett JSON-fil ved รฅ bruke File I/O av Python |
| compact_obj = json.dumps(data, separators=(',',':')) | Kompakt JSON-objekt ved รฅ fjerne mellomromstegn fra JSON-objekt ved hjelp av skilletegn |
| formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formatering av JSON-kode ved hjelp av innrykk |
| sorted_string = json.dumps(x, indent=4, sort_keys=True) | Sorterer JSON-objektnรธkkelen i alfabetisk rekkefรธlge |
| complex_obj = json.dumps(4 + 5j, default=complex_encode) | Python Kompleks objektkoding i JSON |
| JSONEncoder().encode(colour_dict) | Bruk av JSONEncoder Class for serialisering |
| json.loads(data_string) | Dekoder JSON-streng inn Python ordbok med funksjonen json.loads(). |
| json.loads('{โ__complex__โ: true, โrealโ: 4, โimgโ: 5}', object_hook = is_complex) | Dekoding av komplekst JSON-objekt til Python |
| JSONDecoder().decode(fargestreng) | Bruk av dekoding JSON til Python med deserialisering |








