Python JSON: Encode(dumps), Decode(loads) & Read JSON File

⚡ Smart opsummering

JSON er et let tekstformat til udveksling af data, og Pythons indbyggede json-modul læser og skriver det nemt. Her lærer du at kode Python objekter med dumps() og afkode JSON med loads(), plus fil-I/O og mere.

  • 📦 Hvad er det: JSON er et tekstformat til udveksling af data som nøgle-værdi-par.
  • 📥 importer json: Python's indbyggede json-modul håndterer alle JSON-operationer.
  • ➡️ Encoding: json.dumps() konverterer en Python objektet ind i en JSON-streng.
  • ⬅️ afkodning: json.loads() analyserer en JSON-streng til en Python objekt.
  • 📂 Fil I/O: json.dump() og json.load() skriver og læser JSON-filer.
  • 🤖 AI-hjælp: AI-værktøjer som Copilot genererer JSON-kodning og afkoder kode øjeblikkeligt.

Python JSON-dumps indlæser

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 Beskrivelse
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.

Python JSON Encode 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'}

Python JSON Decode Eksempel

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

Parser JSON-fil ind Python

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
}

Format JSON-kode Eksempel

For bedre at forstå dette skal du ændre indrykning til 40 og observere output-

Format JSON-kode Eksempel

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

  1. Virkelig del
  2. imaginær del

Kompleks objektkodning af Python

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 URLEksempel fra det virkelige liv

Vi henter data fra CityBike NYC (Bike Sharing System) fra bestemte steder 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")

JSON bibliotek i Python

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

Kommandolinjegrænseflade med JSON

$ 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 Beskrivelse
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

Ofte Stillede Spørgsmål

JSON (JavaScript Object Notation) er et let tekstformat til lagring og udveksling af data som nøgle-værdi-par. Python's indbyggede json-modul koder og afkoder det nemt.

Brug json.dumps() til at konvertere en ordbog eller liste til en JSON-streng, eller json.dump() til at skrive den direkte til en fil. Denne proces kaldes kodning.

Brug json.loads() til at parse en JSON-streng til en Python dictionary eller json.load() til at læse og afkode JSON direkte fra et filobjekt.

Send indent-argumentet til json.dumps(), f.eks. json.dumps(data, indent=4). Dette formaterer JSON-filen med linjeskift og indentation for lettere læsning.

Sæt sort_keys=True i json.dumps(), for eksempel json.dumps(data, sort_keys=True). Dette arrangerer nøglerne i stigende alfabetisk rækkefølge i outputtet.

AI-assistenter som GitHub Copilot autofuldfører json.dumps()- og loads()-kald, genererer encodere til brugerdefinerede objekter og bygger kode til at hente og analysere JSON fra en API.

Ja. AI-drevne værktøjer kan automatisere generering af parsere, knytte JSON til Python klasser og tilføj fejlhåndtering for forkert udformede data eller manglende nøgler i JSON-svar.

Brug anmodningsbiblioteket til at hente URL, og send derefter svarteksten til json.loads(). Alternativt kan du kalde svarobjektets .json()-metode for at afkode den direkte.

Opsummer dette indlæg med: