Python JSON: Kooda (vedoksia), purkaa (lataa) ja lue JSON-tiedosto

Missรค JSON on Python?

JSON in Python on vakiomuoto, joka on saanut inspiraationsa JavaSkripti tiedonvaihtoon ja tiedonsiirtoon tekstimuodossa verkon yli. Yleensรค JSON on merkkijono- tai tekstimuodossa. Sovellusliittymรคt ja tietokannat voivat kรคyttรครค sitรค, ja se edustaa objekteja nimi/arvo-pareina. JSON tarkoittaa JavaScript Object Notation.

Python JSON-syntaksi:

JSON kirjoitetaan avain- ja arvoparina.

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

JSON on hyvin samanlainen Python sanakirja. Python tukee JSON:ia, ja siinรค on sisรครคnrakennettu kirjasto JSON-muodossa.

JSON-kirjasto sisรครคn Python

"marsalkka'Ja'suolakurkku' ulkoiset moduulit Python yllรคpitรครค versiota JSON Python kirjasto. Tyรถskentely JSONin kanssa Python suorittaaksesi JSON-toimintoja, kuten koodauksen ja dekoodauksen, sinun on ensin tuoda JSON-kirjasto ja sitรค varten sinun .py tiedosto,

import json

Seuraavat menetelmรคt ovat kรคytettรคvissรค JSONissa Python moduuli

Menetelmรค Tuotetiedot
kaatopaikat () koodaus JSON-objekteihin
dump() koodatun merkkijonon kirjoittaminen tiedostoon
lataa () Pura JSON-merkkijono
ladata() Purkaa JSON-tiedostoa luettaessa

Python JSONiin (koodaus)

JSON Kirjasto Python suorittaa seuraavan kรครคnnรถksen Python objektit oletuksena JSON-objekteiksi

Python JSON
dict objekti
lista Ryhmรค
Unicode jono
numero โ€“ int, long numero โ€“ int
kellua numero - todellinen
Totta Totta
Vรครคrรค Vรครคrรค
Ei eristetty Null

Muuntaminen Python dataa JSONiin kutsutaan koodaustoiminnoksi. Koodaus tehdรครคn JSON-kirjastomenetelmรคn avulla - kaatopaikat ()

JSON dumps() sisรครคn Python

json.dumps() in Python on menetelmรค, joka muuntaa sanakirjaobjekteja Python JSON-merkkijonotietomuotoon. Se on hyรถdyllinen, kun objektien on oltava merkkijonomuodossa toimintoihin, kuten jรคsennykseen, tulostukseen jne.

Suoritetaan nyt ensimmรคinen json.dumps-koodausesimerkki 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)

lรคhtรถ:

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

Katsotaanpa esimerkkiรค Python kirjoita JSON tiedostoon sanakirjan JSON-tiedoston luomiseksi kรคyttรคmรคllรค samaa toimintoa 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)

lรคhtรถ:

Ei mitรครคn nรคytettรคvรครคโ€ฆ Jรคrjestelmรคssรคsi luodaan json_file.json. Voit tarkistaa tiedoston alla olevan kuvan mukaisesti, kirjoita JSON tiedostoon Python esimerkki.

Python Esimerkki JSON-koodauksesta

JSON kohteeseen Python (Dekoodaus)

JSON-merkkijonojen dekoodaus tehdรครคn sisรครคnrakennetun menetelmรคn avulla json.loads() & json.load() JSON-kirjastosta Python. Tรคssรค kรครคnnรถstaulukossa on esimerkki JSON-objekteista Python esineet joista on apua koodauksen suorittamisessa Python JSON-merkkijonosta.

JSON Python
objekti dict
Ryhmรค lista
jono Unicode
numero โ€“ int numero โ€“ int, long
numero - todellinen kellua
Totta Totta
Vรครคrรค Vรครคrรค
Null Ei eristetty

Katsotaanpa perusjรคsennys JSON Python esimerkki dekoodauksesta json.loads toiminto,

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

lรคhtรถ:

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

Python Esimerkki JSON-dekoodauksesta

JSON-tiedoston purkaminen tai JSON-tiedoston jรคsentรคminen Python

Nyt opimme lukemaan JSON-tiedostoa Python Python jรคsentรครค JSON-esimerkki:

HUOMAUTUS: JSON-tiedoston dekoodaus liittyy tiedoston sisรครคntuloon/lรคhtรถรถn (I/O) liittyvรครคn toimintoon. JSON-tiedoston on oltava jรคrjestelmรคssรคsi mรครคritetyssรค paikassa, jonka mainitsit ohjelmassasi.

Python lue JSON-tiedosto Esimerkki:

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)

Tรคssรค dataa on sanakirjaobjekti Python kuten yllรค olevassa luetussa JSON-tiedostossa nรคkyy Python esimerkki.

lรคhtรถ:

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

Jรคsennetรครคn JSON-tiedostoa Python

Kompakti koodaus sisรครคn Python

Kun sinun on pienennettรคvรค JSON-tiedostosi kokoa, voit kรคyttรครค kompaktia koodausta Python.

esimerkiksi,

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)

lรคhtรถ:

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

Muotoile JSON-koodi (kaunis printti)

  • Tavoitteena on kirjoittaa hyvin muotoiltu koodi ihmisen ymmรคrtรคmiseksi. Kauniin tulostuksen avulla kuka tahansa voi helposti ymmรคrtรครค koodin.

Esimerkiksi:

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)

lรคhtรถ:

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

Muotoile JSON-koodi Esimerkki

Ymmรคrtรครคksesi tรคmรคn paremmin, vaihda sisennykseksi 40 ja tarkkaile tulos-

Muotoile JSON-koodi Esimerkki

JSON-koodin tilaaminen:

lajitteluavaimet mรครคrite sisรครคn Python dumps-funktion argumentti lajittelee JSON-avaimen nousevaan jรคrjestykseen. Sort_keys-argumentti on Boolen attribuutti. Kun se on totta, lajittelu on sallittua muuten ei. Ymmรคrretรครคn kanssa Python merkkijono JSON-lajitteluesimerkki.

esimerkiksi,

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)

lรคhtรถ:

{
    "age": 45,
    "cars": [ {
        "model": "Audi A1", 
        "mpg": 15.1
    },
    {
        "model": "Zeep Compass", 
        "mpg": 18.1
    }
    ],
    "children": [ "Alice",
		  "Bob"
	],
    "married": true,
    "name": "Ken",
    "pets": [ 
		"Dog"
	]
}

Kuten huomaat avainten iรคn, autot, lapset jne. on jรคrjestetty nousevaan jรคrjestykseen.

Monimutkainen objektikoodaus Python

Monimutkaisella objektilla on kaksi eri osaa

  1. Todellinen osa
  2. Kuvitteellinen osa

Monimutkainen objektikoodaus Python

Esimerkki: 3 +2i

Ennen kuin suoritat monimutkaisen objektin koodauksen, sinun on tarkistettava, onko muuttuja monimutkainen vai ei. Sinun on luotava funktio, joka tarkistaa muuttujaan tallennetun arvon instanssimenetelmรคllรค.

Luodaan erityinen toiminto tarkistamaan, onko objekti monimutkainen tai kelvollinen koodaukseen.

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)

lรคhtรถ:

'[4.0, 5.0]'

Monimutkainen JSON-objektin dekoodaus sisรครคn Python

Jos haluat purkaa monimutkaisen objektin JSONissa, kรคytรค object_hook-parametria, joka tarkistaa, sisรคltรครคkรถ JSON-merkkijono monimutkaisen objektin vai ei. Ymmรคrretรครคn merkkijonolla JSONiin Python esimerkiksi,

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)

lรคhtรถ:

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

Yleiskatsaus JSON-serialisointiluokkaan JSONEncoder

JSONEncoder-luokkaa kรคytetรครคn minkรค tahansa sarjoitukseen Python objektia koodauksen aikana. Se sisรคltรครค kolme erilaista koodausmenetelmรครค, jotka ovat

  • oletus(o) โ€“ Toteutettu alaluokkaan ja paluu serialize -objektille o esine.
  • koodaa(o) โ€“ Sama kuin JSON-vedot Python menetelmรค palauttaa JSON-merkkijonon Python tietorakenne.
  • iterencode(o) โ€“ Esitรค merkkijono yksitellen ja koodaa objekti o.

JSONEncoder-luokan encode()-metodin avulla voimme myรถs koodata minkรค tahansa Python kohde alla olevan kuvan mukaisesti Python Esimerkki JSON-kooderista.

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

lรคhtรถ:

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

Yleiskatsaus JSON-sarjanpoistoluokkaan JSONDecoder

JSONDecoder-luokkaa kรคytetรครคn minkรค tahansa sarjoitukseen Python kohdetta dekoodauksen aikana. Se sisรคltรครค kolme erilaista dekoodausmenetelmรครค, jotka ovat

  • oletus(o) โ€“ Toteutettu alaluokassa ja palauttaa deserialisoitu objekti o esine.
  • dekoodaa (o) โ€“ Sama kuin json.loads()-metodin palautus Python JSON-merkkijonon tai -datan tietorakenne.
  • raaka_dekoodaus(o) โ€“ Edustaa Python sanakirja yksitellen ja purkaa objekti o.

JSONDecoder-luokan decode()-menetelmรคn avulla voimme myรถs purkaa JSON-merkkijonon alla olevan kuvan mukaisesti. Python Esimerkki JSON-dekooderista.

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)

lรคhtรถ:

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

JSON-tietojen purkaminen URL-osoitteesta: Esimerkki tosielรคmรคstรค

Haemme CityBike NYC:n (Bike Sharing System) tiedot mรครคritetystรค URL-osoitteesta (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) ja muuntaa sanakirjamuotoon.

Python lataa JSON tiedostosta Esimerkki:

HUOMAUTUS: - Varmista, ettรค pyyntรถkirjasto on jo asennettu tietokoneellesi Python, Jos ei, avaa Terminal tai CMD ja kirjoita

  • (For Python 3 tai uudempi) pip3-asennuspyynnรถt
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]) 

lรคhtรถ:

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

JSON-kirjastoon liittyvรคt poikkeukset Python:

  • luokka json.JSONDecoderError kรคsittelee dekoodaukseen liittyvรคn poikkeuksen. ja se on alaluokka ValueError.
  • Poikkeus - json.JSONDecoderError(msg, doc)
  • Poikkeusparametrit ovat
    • msg โ€“ Muotoilematon virheviesti
    • doc โ€“ JSON-dokumentit jรคsennetty
    • pos โ€“ aloita asiakirjan hakemisto, kun se epรคonnistuu
    • lineno โ€“ rivin nรคytรถt vastaavat pos
    • kaksoispiste โ€“ sarake ei vastaa paikkaa

Python lataa JSON tiedostosta Esimerkki:

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-kirjasto sisรครคn Python

Infinite ja NaN Numbers in Python

JSON Data Interchange Format (RFC โ€“ Request For Comments) ei salli Infinite- tai Nan-arvoa, mutta siinรค ei ole rajoituksia Python- JSON-kirjasto Infinite- ja Nan-arvoon liittyvien toimintojen suorittamiseen. Jos JSON saa INFINITE- ja Nan-tietotyypit, se muuntaa sen literaaliksi.

esimerkiksi,

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

lรคhtรถ:

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

Toistuva avain JSON-merkkijonossa

RFC mรครคrittรครค, ettรค avaimen nimen tulee olla yksilรถllinen JSON-objektissa, mutta se ei ole pakollista. Python JSON-kirjasto ei aiheuta poikkeusta toistuvista objekteista JSONissa. Se jรคttรครค huomioimatta kaikki toistuvat avainarvoparit ja ottaa huomioon vain viimeisen avainarvoparin.

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

lรคhtรถ:

{'a': 3}

CLI (Command Line Interface), jossa on JSON Python

json.tool tarjoaa komentoriviliittymรคn JSON pretty-print -syntaksin vahvistamiseen. Katsotaanpa esimerkkiรค CLI:stรค

Komentoriviliittymรค JSON:n kanssa

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

lรคhtรถ:

{
    "name": " Kings Authur "
}

JSONin edut sisรครคn Python

  • Helppo siirtรครค takaisin sรคilรถn ja arvon vรคlillรค (JSON to Python ja Python JSONiin)
  • Ihmisen luettavissa oleva (kauniin painettu) JSON-objekti
  • Kรคytetรครคn laajasti tietojenkรคsittelyssรค.
  • Sillรค ei ole samaa tietorakennetta yhdessรค tiedostossa.

JSONin kรคyttรถรถnottorajoitukset Python

  • JSON-alueen deserialisoijassa ja luvun ennustamisessa
  • JSON-merkkijonon ja JSON-taulukoiden enimmรคispituus ja objektin sisรคkkรคiset tasot.

Python JSON-huijauslehti

Python JSON-toiminto Tuotetiedot
json.dumps(person_data) Luo JSON-objekti
json.dump(person_data, file_write) Luo JSON-tiedosto kรคyttรคmรคllรค File I/O of Python
compact_obj = json.dumps(data, separators=(',',':')) Tiivistรค JSON-objekti poistamalla vรคlilyรถnti JSON-objektista erottimen avulla
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) JSON-koodin muotoilu sisennyksen avulla
lajiteltu_merkkijono = json.dumps(x, indent=4, sort_keys=True) JSON-objektiavaimen lajittelu aakkosjรคrjestykseen
kompleksi_obj = json.dumps(4 + 5j, oletus = monimutkainen_encode) Python Monimutkainen objektikoodaus JSONissa
JSONEncoder().encode(colour_dict) JSONEncoder-luokan kรคyttรถ sarjoituksessa
json.loads(data_string) Puretaan JSON-merkkijonoa Python sanakirja json.loads()-funktiolla
json.loads('{"__complex__": tosi, "todellinen": 4, "img": 5}', object_hook = on_kompleksi) Monimutkaisen JSON-objektin dekoodaus kohteeseen Python
JSONDecoder().decode(vรคrimerkkijono) JSON-dekoodauksen kรคyttรถ Python deserialisoinnin kanssa

Tiivistรค tรคmรค viesti seuraavasti: