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

Python Eksempel på JSON-koding

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

Python JSON Decode Eksempel

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

Parser JSON-fil inn Python

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
}

Format JSON-kode Eksempel

For bedre å forstå dette, endre innrykk til 40 og observer utdata-

Format JSON-kode Eksempel

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

  1. Virkelig del
  2. Fantasifull del

Kompleks objektkoding av Python

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

JSON-biblioteket i Python

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

Kommandolinjegrensesnitt med JSON

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