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