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

Vad รคr JSON i Python?

JSON in Python รคr ett standardformat inspirerat av JavaSkript fรถr datautbyte och dataรถverfรถring som textformat รถver ett nรคtverk. I allmรคnhet รคr JSON i strรคng- eller textformat. Det kan anvรคndas av API:er och databaser, och det representerar objekt som namn/vรคrdepar. JSON stรฅr fรถr JavaSkriptobjektnotation.

Python JSON-syntax:

JSON skrivs som nyckel- och vรคrdepar.

{
        "Key":  "Value",
        "Key":  "Value",
} 

JSON รคr vรคldigt lik Python lexikon. Python stรถder JSON, och den har ett inbyggt bibliotek som JSON.

JSON-biblioteket i Python

'marskalk"och"รคttikslag' externa moduler av Python behรฅlla en version av JSON Python bibliotek. Arbetar med JSON i Python fรถr att utfรถra JSON-relaterade operationer som kodning och avkodning mรฅste du fรถrst importera JSON-biblioteket och fรถr det i din .py fil,

import json

Fรถljande metoder รคr tillgรคngliga i JSON Python modul

Metod BESKRIVNING
dumpar () kodning till JSON-objekt
dumpa() kodad strรคng som skriver pรฅ fil
massor() Avkoda JSON-strรคngen
ladda() Avkoda medan JSON-filen lรคses

Python till JSON (kodning)

JSON Bibliotek av Python utfรถr fรถljande รถversรคttning av Python objekt till JSON-objekt som standard

Python JSON
dict ร„ndamรฅlet
lista array
unicode Strรคng
nummer โ€“ int, lรฅng nummer โ€“ int
flyta nummer โ€“ verkligt
Sant Sant
Falsk Falsk
Ingen Null

konvertera Python data till JSON kallas en kodningsoperation. Kodning gรถrs med hjรคlp av JSON-biblioteksmetoden - dumpar ()

JSON dumpar() in Python

json.dumps() in Python รคr en metod som konverterar ordboksobjekt av Python till JSON-strรคngdataformat. Det รคr anvรคndbart nรคr objekten mรฅste vara i strรคngformat fรถr operationer som att analysera, skriva ut, etc.

Lรฅt oss nu utfรถra vรฅrt fรถrsta json.dumps-kodningsexempel 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)

Produktion:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Lรฅt oss se ett exempel pรฅ Python skriv JSON till fil fรถr att skapa en JSON-fil fรถr ordboken med samma funktion dumpa()

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

Produktion:

Inget att visa...I ditt system skapas json_file.json. Du kan kontrollera den filen som visas i nedanstรฅende skriv JSON till fil Python exempel.

Python JSON-kodningsexempel

JSON till Python (Avkodning)

JSON-strรคngavkodning gรถrs med hjรคlp av inbyggd metod json.loads() & json.load() av JSON-biblioteket i Python. Hรคr visar รถversรคttningstabellen exempel pรฅ JSON-objekt till Python objekt som รคr anvรคndbara att utfรถra avkodning i Python av JSON-strรคngen.

JSON Python
ร„ndamรฅlet dict
array lista
Strรคng unicode
nummer โ€“ int nummer โ€“ int, lรฅng
nummer โ€“ verkligt flyta
Sant Sant
Falsk Falsk
Null Ingen

Lรฅt oss se en grundlรคggande parse JSON Python exempel pรฅ avkodning med hjรคlp av json.loads fungera,

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

Produktion:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Python JSON-avkodningsexempel

Avkodar JSON-fil eller parsar JSON-fil in Python

Nu kommer vi att lรคra oss hur man lรคser JSON-filen Python med Python tolka JSON-exempel:

OBS: Avkodning av JSON-fil รคr filinmatning/utgรฅng (I/O) relaterad operation. JSON-filen mรฅste finnas pรฅ ditt system pรฅ den angivna platsen som du nรคmner i ditt program.

Python lรคs JSON-fil Exempel:

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)

Hรคr data รคr ett ordboksobjekt fรถr Python som visas i ovanstรฅende lรคs JSON-fil Python exempel.

Produktion:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Parsar in JSON-fil Python

Kompakt kodning in Python

Nรคr du behรถver minska storleken pรฅ din JSON-fil kan du anvรคnda kompakt kodning in Python.

Exempel,

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)

Produktion:

'["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 **

Formatera JSON-kod (fin utskrift)

  • Syftet รคr att skriva vรคlformaterad kod fรถr mรคnsklig fรถrstรฅelse. Med hjรคlp av snygg utskrift kan vem som helst enkelt fรถrstรฅ koden.

Exempel:

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)

Produktion:

{
   "a" : 4,
   "b" : 5
}

Format JSON-kod Exempel

Fรถr att bรคttre fรถrstรฅ detta, รคndra indrag till 40 och observera output-

Format JSON-kod Exempel

Bestรคller JSON-koden:

sort_nycklar attribut i Python dumps-funktionens argument kommer att sortera nyckeln i JSON i stigande ordning. Argumentet sort_keys รคr ett booleskt attribut. Nรคr det รคr sant รคr sortering tillรฅtet annars inte. Lรฅt oss fรถrstรฅ med Python strรคng till JSON sorteringsexempel.

Exempel,

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)

Produktion:

{
    "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 observera รคr nycklarnas รฅlder, bilar, barn etc ordnade i stigande ordning.

Komplex objektkodning av Python

Ett komplext objekt har tvรฅ olika delar dvs

  1. Verklig del
  2. Fantasifull del

Komplex objektkodning av Python

Exempel: 3 +2i

Innan du utfรถr kodning av ett komplext objekt mรฅste du kontrollera att en variabel รคr komplex eller inte. Du mรฅste skapa en funktion som kontrollerar vรคrdet lagrat i en variabel med hjรคlp av en instansmetod.

Lรฅt oss skapa den specifika funktionen fรถr att kontrollera objektet รคr komplext eller berรคttigat till 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)

Produktion:

'[4.0, 5.0]'

Komplext JSON-objekt avkodar in Python

Fรถr att avkoda komplext objekt i JSON, anvรคnd en object_hook-parameter som kontrollerar att JSON-strรคngen innehรฅller det komplexa objektet eller inte. Lรฅt oss fรถrstรฅ med strรคng till JSON Python Exempel,

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)

Produktion:

Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}

ร–versikt รถver JSON Serialization class JSONEncoder

JSONEncoder-klassen anvรคnds fรถr serialisering av nรฅgon Python objekt medan du utfรถr kodning. Den innehรฅller tre olika metoder fรถr kodning som รคr

  • default(o) โ€“ Implementerat i subklassen och returnera serialisera objekt fรถr o objekt.
  • koda(o) โ€“ Samma som JSON-dumpar Python metod returnerar JSON-strรคng av Python datastruktur.
  • iterencode(o) โ€“ Representera strรคngen en efter en och koda objekt o.

Med hjรคlp av encode()-metoden fรถr JSONEncoder-klassen kan vi ocksรฅ koda alla Python objekt som visas nedan Python Exempel pรฅ JSON-kodare.

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

Produktion:

'{"colour": ["red", "yellow", "green"]}'

ร–versikt รถver JSON Deserialization klass JSONDecoder

JSONDecoder-klassen anvรคnds fรถr deserialisering av nรฅgon Python objekt medan du utfรถr avkodning. Den innehรฅller tre olika metoder fรถr avkodning som รคr

  • default(o) โ€“ Implementerat i subklassen och returnera deserialiserade objektet o objekt.
  • avkoda(o) โ€“ Samma som json.loads()-metoden returnerar Python datastruktur fรถr JSON-strรคng eller data.
  • raw_decode(o) โ€“ Representera Python ordbok en efter en och avkoda objekt o.

Med hjรคlp av decode()-metoden fรถr JSONDecoder-klassen kan vi ocksรฅ avkoda JSON-strรคngen som visas nedan Python Exempel pรฅ JSON-avkodare.

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)

Produktion:

{'colour': ['red', 'yellow']}

Avkodning av JSON-data frรฅn URL: Exempel i verkligheten

Vi kommer att hรคmta data frรฅn CityBike NYC (Bike Sharing System) frรฅn specificerad URL(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) och konvertera till ordboksformat.

Python ladda JSON frรฅn fil Exempel:

OBS:- Se till att begรคrandebiblioteket redan รคr installerat i din Python, Om inte, รถppna Terminal eller CMD och skriv

  • (Fรถr Python 3 eller hรถgre) pip3 installationsfรถrfrรฅgningar
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]) 

Produktion:

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

Undantag relaterade till JSON Library i Python:

  • Klass json.JSONDecoderError hanterar undantaget relaterat till avkodningsoperationen. och det รคr en underklass till ValueError.
  • Undantag โ€“ json.JSONDecoderError(msg, doc)
  • Undantagsparametrar รคr,
    • msg โ€“ Oformaterat felmeddelande
    • doc โ€“ JSON-dokument tolkade
    • pos โ€“ starta indexet fรถr dokumentet nรคr det misslyckades
    • lineno โ€“ line no show motsvarar pos
    • kolon โ€“ kolumn nr motsvarar pos

Python ladda JSON frรฅn fil Exempel:

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-biblioteket i Python

Infinite och NaN Numbers in Python

JSON Data Interchange Format (RFC โ€“ Request For Comments) tillรฅter inte Oรคndligt eller Nan-vรคrde men det finns ingen begrรคnsning i Python- JSON-bibliotek fรถr att utfรถra operationer relaterad till Infinite och Nan Value. Om JSON fรฅr INFINITE och Nan datatype sรฅ konverteras den till bokstavlig.

Exempel,

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

Produktion:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Upprepad nyckel i JSON String

RFC anger att nyckelnamnet ska vara unikt i ett JSON-objekt, men det รคr inte obligatoriskt. Python JSON-biblioteket tar inte upp ett undantag fรถr upprepade objekt i JSON. Den ignorerar alla upprepade nyckel-vรคrde-par och tar endast hรคnsyn till det sista nyckel-vรคrde-paret bland dem.

  • Exempel,
import json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Produktion:

{'a': 3}

CLI (Command Line Interface) med JSON in Python

json.tool tillhandahรฅller kommandoradsgrรคnssnittet fรถr att validera JSON pretty-print-syntax. Lรฅt oss se ett exempel pรฅ CLI

Kommandoradsgrรคnssnitt med JSON

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Produktion:

{
    "name": " Kings Authur "
}

Fรถrdelar med JSON i Python

  • Lรคtt att flytta tillbaka mellan container och vรคrde (JSON till Python och Python till JSON)
  • Mรคnskligt lรคsbart (Pretty-print) JSON-objekt
  • Anvรคnds i stor utstrรคckning vid datahantering.
  • Har inte samma datastruktur i den enskilda filen.

Implementeringsbegrรคnsningar fรถr JSON i Python

  • I deserializer av JSON-intervall och fรถrutsรคgelse av ett nummer
  • Den maximala lรคngden pรฅ JSON-strรคngen och arrayer av JSON och kapslingsnivรฅer fรถr objekt.

Python JSON Cheat Sheet

Python JSON-funktion BESKRIVNING
json.dumps(person_data) Skapa JSON-objekt
json.dump(person_data, file_write) Skapa JSON-fil med File I/O of Python
compact_obj = json.dumps(data, separators=(',',':')) Komprimera JSON-objekt genom att ta bort mellanslagstecken frรฅn JSON-objekt med hjรคlp av separator
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Formatera JSON-kod med indrag
sorted_string = json.dumps(x, indent=4, sort_keys=True) Sorterar JSON-objektnyckeln i alfabetisk ordning
complex_obj = json.dumps(4 + 5j, default=complex_encode) Python Komplex objektkodning i JSON
JSONEncoder().encode(colour_dict) Anvรคndning av JSONEncoder Class fรถr serialisering
json.loads(data_string) Avkodar JSON-strรคng in Python ordbok med funktionen json.loads().
json.loads('{โ€œ__complex__โ€: true, โ€œrealโ€: 4, โ€œimgโ€: 5}', object_hook = is_complex) Avkodning av komplext JSON-objekt till Python
JSONDecoder().decode(fรคrgstrรคng) Anvรคndning av avkodning av JSON till Python med deserialisering

Sammanfatta detta inlรคgg med: