Python JSON: kodeerige (väljavõtted), dekodeerige (laadib) ja lugege JSON-faili

Milles on JSON? Python?

JSON in Python on standardformaat, mis on inspireeritud JavaSkript andmevahetuseks ja andmeedastuseks tekstivormingus üle võrgu. Üldiselt on JSON stringi- või tekstivormingus. Seda saavad kasutada API-d ja andmebaasid ning see esindab objekte nime/väärtuse paaridena. JSON tähistab JavaSkripti objekti märkimine.

Python JSON-i süntaks:

JSON on kirjutatud võtme ja väärtuse paarina.

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

JSON on väga sarnane Python sõnastik. Python toetab JSON-i ja sellel on JSON-ina sisseehitatud teek.

JSON-i teek Python

"tseremooniameister"ja"hapukurk" välised moodulid Python versiooni säilitada JSON Python raamatukogu. Töötamine JSON-iga Python JSON-iga seotud toimingute (nt kodeerimine ja dekodeerimine) tegemiseks peate esmalt tegema import JSON-i raamatukogu ja selle jaoks teie jaoks .py faili

import json

JSON-is on saadaval järgmised meetodid Python moodul

Meetod Kirjeldus
prügimäed () kodeerimine JSON-objektidesse
dump () kodeeritud stringi kirjutamine faili
laadib () Dekodeerige JSON-string
laadi () Dekodeerige JSON-faili lugemise ajal

Python JSON-ile (kodeering)

JSON Raamatukogu Python teostab järgmise tõlke Python objektid vaikimisi JSON-objektideks

Python JSON
dikteerima objekt
nimekiri Array
Unicode nöör
number – int, long number – int
ujuk number – päris
Tõsi Tõsi
Vale Vale
mitte ükski NULL

Teisendamine Python andmeid JSON-i nimetatakse kodeerimistoiminguks. Kodeerimine toimub JSON teegi meetodi abil - prügimäed ()

JSON dumps() sisse Python

json.dumps() in Python on meetod, mis teisendab sõnastiku objekte Python JSON-stringi andmevormingusse. See on kasulik, kui objektid peavad olema stringivormingus selliste toimingute jaoks nagu sõelumine, printimine jne.

Nüüd esitame esimese json.dumpsi kodeeringu näite koos 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)

Väljund:

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

Vaatame näidet Python kirjutage JSON faili, et luua sõnastiku JSON-fail, kasutades sama funktsiooni 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)

Väljund:

Midagi pole näidata… Teie süsteemis luuakse fail json_file.json. Saate seda faili kontrollida, nagu on näidatud allolevas JSON-i faili kirjutamises Python näide.

Python JSON-i kodeerimise näide

JSON-ile Python (Dekodeerimine)

JSON-stringide dekodeerimine toimub sisseehitatud meetodi abil json.loads() & json.load() JSON-i teegist Python. Siin on tõlketabelis näide JSON-objektide kohta Python esemeid mis on abiks dekodeerimisel Python JSON-stringist.

JSON Python
objekt dikteerima
Array nimekiri
nöör Unicode
number – int number – int, long
number – päris ujuk
Tõsi Tõsi
Vale Vale
NULL mitte ükski

Vaatame põhilist JSON-i sõelumist Python abiga dekodeerimise näide json.loads funktsioon

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

Väljund:

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

Python JSON-i dekodeerimise näide

JSON-faili dekodeerimine või JSON-faili parsimine Python

Nüüd õpime, kuidas JSON-faili sisse lugeda Python koos Python parsi JSON-i näide:

MÄRKUS: JSON-faili dekodeerimine on faili sisendi/väljundiga (I/O) seotud toiming. JSON-fail peab teie süsteemis olemas olema määratud asukohas, mida oma programmis mainite.

Python loe JSON-faili Näide:

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)

Siin andmed on sõnastikuobjekt Python nagu on näidatud ülaltoodud loetud JSON-failis Python näide.

Väljund:

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

JSON-faili sõelumine Python

Kompaktne kodeering Python

Kui teil on vaja oma JSON-faili suurust vähendada, saate kasutada kompaktset kodeeringut Python.

Näide,

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)

Väljund:

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

Vormindage JSON-kood (hästi prinditud)

  • Eesmärk on kirjutada hästi vormindatud kood inimese arusaamiseks. Ilusa printimise abil saab igaüks koodist hõlpsasti aru.

Näide:

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)

Väljund:

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

JSON-koodi vormingu näide

Selle paremaks mõistmiseks muutke taane 40-ks ja jälgige väljundit-

JSON-koodi vormingu näide

JSON-koodi tellimine:

sortimisklahvid atribuut sisse Python funktsiooni dumps argument sorteerib JSON-i võtme kasvavas järjekorras. Argument sort_keys on Boole'i ​​atribuut. Kui see on tõsi, on sorteerimine lubatud, muidu mitte. Saame aru koos Python string to JSON sortimise näide.

Näide,

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)

Väljund:

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

Nagu näete võtmete vanusest, on autod, lapsed jne järjestatud kasvavas järjekorras.

Keeruline objektide kodeering Python

Kompleksobjektil on kaks erinevat osa

  1. Päris osa
  2. Väljamõeldud osa

Keeruline objektide kodeerimine Python

Näide: 3 +2i

Enne keeruka objekti kodeerimist peate kontrollima, kas muutuja on keeruline või mitte. Peate looma funktsiooni, mis kontrollib muutujasse salvestatud väärtust eksemplarimeetodi abil.

Loome konkreetse funktsiooni kontrollimiseks, kas objekt on keeruline või kodeerimiseks sobilik.

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)

Väljund:

'[4.0, 5.0]'

Keeruline JSON-objekti dekodeerimine Python

JSON-is keeruka objekti dekodeerimiseks kasutage parameetrit object_hook, mis kontrollib, kas JSON-string sisaldab keerulist objekti või mitte. Saab aru stringiga JSON-i Python Näide,

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)

Väljund:

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

JSON-i serialiseerimisklassi JSONEncoder ülevaade

JSONEncoder klassi kasutatakse mis tahes serialiseerimiseks Python objekti kodeerimise ajal. See sisaldab kolme erinevat kodeerimismeetodit, mis on

  • vaikimisi(o) – Rakendatud alamklassi ja tagastamise serialize objekti jaoks o objekt
  • kodeeri (o) – Sama mis JSON-i prügimäed Python meetod tagastab JSON-stringi Python andmete struktuur.
  • iterencode(o) – Esitage string ükshaaval ja kodeerige objekt o.

JSONEncoder klassi meetodi encode() abil saame kodeerida ka mis tahes Python objekti, nagu allpool näidatud Python JSON-kodeerija näide.

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

Väljund:

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

JSON-i serialiseerimisklassi JSONDecoder ülevaade

JSONDecoder klassi kasutatakse mis tahes deserialiseerimiseks Python objekti dekodeerimise ajal. See sisaldab kolme erinevat dekodeerimismeetodit, mis on

  • vaikimisi(o) – Rakendatud alamklassis ja tagastada deserialiseeritud objekt o objekt
  • dekodeerida (o) – Sama nagu json.loads() meetodi tagastamine Python JSON-stringi või andmete andmestruktuur.
  • töötlemata_dekood(o) – esindama Python sõnastik ükshaaval ja dekodeerida objekt o.

JSONDecoder klassi meetodi decode() abil saame dekodeerida ka JSON-stringi, nagu allpool näidatud Python JSON-dekoodri näide.

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)

Väljund:

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

JSON-andmete dekodeerimine URL-ist: näide tegelikust elust

Toome CityBike NYC (rattajagamissüsteemi) andmed määratud URL-ilt (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) ja teisendada sõnaraamatu vormingusse.

Python laadige failist JSON Näide:

MÄRKUS. - Veenduge, et taotluste teek on teie seadmesse juba installitud Python, Kui ei, siis avage terminal või CMD ja tippige

  • (For Python 3 või uuem) pip3 installitaotlused
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]) 

Väljund:

<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-i teegiga seotud erandid Python:

  • klass json.JSONDecoderError käsitleb dekodeerimistoiminguga seotud erandit. ja see on alamklass ValueError.
  • Erand - json.JSONDecoderError(msg, doc)
  • Erandi parameetrid on
    • msg – vormindamata veateade
    • doc – JSON-dokumendid sõelutud
    • pos – dokumendi käivitamise indeks, kui see ebaõnnestub
    • lineno – rida ei näita vastab pos
    • koolon – veerg nr vastab pos

Python laadige failist JSON Näide:

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

Lõpmatu ja NaN Numbers in Python

JSON-i andmevahetusvorming (RFC – kommentaaride nõue) ei luba kasutada lõpmatut ega Nan-väärtust, kuid sellel pole piiranguid Python- JSON-i teek lõpmatu ja Nan-väärtusega seotud toimingu tegemiseks. Kui JSON saab andmetüübi INFINITE ja Nan, teisendatakse see literaaliks.

Näide,

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

Väljund:

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

Korduv võti JSON-stringis

RFC määrab, et võtme nimi peaks JSON-objektis olema unikaalne, kuid see ei ole kohustuslik. Python JSON-i teek ei tekita JSON-is korduvate objektide erandit. See ignoreerib kõiki korduvaid võtme-väärtuste paare ja arvestab nende hulgast ainult viimast võtme-väärtuste paari.

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

Väljund:

{'a': 3}

CLI (käsurea liides) koos JSON-iga Python

json.tool pakub käsurea liidest JSON-i pärisprindi süntaksi kinnitamiseks. Vaatame CLI näidet

Käsurea liides JSON-iga

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

Väljund:

{
    "name": " Kings Authur "
}

JSON-i eelised Python

  • Lihtne konteineri ja väärtuse vahel tagasi liikuda (JSON-i Python ja Python JSON-ile)
  • Inimloetav (hästi trükitud) JSON-objekt
  • Laialdaselt kasutusel andmetöötluses.
  • Sellel ei ole ühes failis sama andmestruktuur.

JSON-i rakendamise piirangud Python

  • JSON-i vahemiku deserialiseerijas ja arvu ennustamises
  • JSON-stringi ja JSON-massiivide maksimaalne pikkus ning objektide pesastustasemed.

Python JSON-petuleht

Python JSON-funktsioon Kirjeldus
json.dumps(isiku_andmed) Looge JSON-objekt
json.dump(isiku_andmed, faili_kirjutus) Looge JSON-fail, kasutades faili I/O of Python
compact_obj = json.dumps(data, separators=(',',':')) Tihendage JSON-objekt, eemaldades eraldaja abil JSON-objektilt tühiku
formatted_obj = json.dumps(dic, taane=4, eraldajad=(',', ':')) JSON-koodi vormindamine taande abil
sorted_string = json.dumps(x, taane=4, sort_keys=True) JSON-objektivõtme sortimine tähestiku järjekorras
kompleksi_obj = json.dumps(4 + 5j, vaike=kompleks_encode) Python JSON-i keeruline objektide kodeerimine
JSONEncoder().encode(color_dict) JSONEncoder klassi kasutamine serialiseerimiseks
json.loads(data_string) JSON-stringi dekodeerimine Python sõnastik funktsiooni json.loads() abil
json.loads('{“__complex__”: tõsi, “päris”: 4, “img”: 5}', objekti_konks = on_kompleks) Keerulise JSON-objekti dekodeerimine Python
JSONDekooder().dekood(värvi_string) JSON-i dekodeerimise kasutamine Python koos deserialiseerimisega