Python JSON: kodeerimine (dump), dekodeerimine (laadimine) json Data & Fail (näide)

Lang L: none (table-of-contents):

Anonim

Mis on JSON?

JSON on andmevahetuse standardvorming, mis on inspireeritud JavaScripti abil. Üldiselt on JSON stringi- või tekstivormingus. JSON tähistab J ava S cript O bject N otation.

JSON-i süntaks: JSON kirjutatakse võtme- ja väärtuspaarina.

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

JSON on väga sarnane Pythoni sõnastikuga. Python toetab JSON-i ja tal on JSON-iga sisseehitatud teek.

JSON-i raamatukogu Pythonis

Pythoni välised moodulid " marssal " ja " pickle" säilitavad JSON-i teegi versiooni . JSON-iga seotud toimingute, näiteks kodeerimine ja dekodeerimine Pythonis, sooritamiseks peate kõigepealt importima JSON-i teegi ja selleks oma .py- faili,

import json

JSON-moodulis on saadaval järgmised meetodid

Meetod Kirjeldus
prügimäed () kodeerimine JSON-objektidele
prügila () kodeeritud stringi kirjutamine faili
koormused () Dekodeerige JSON-string
koormus () Dekodeerige JSON-faili lugemise ajal

Pythoni JSON-i (kodeerimine)

JSON Pythoni raamatukogu teostab vaikimisi Pythoni objektide tõlke JSON-i objektideks

Python JSON
dikteerima Objekt
nimekiri Massiiv
unicode String
number - int, pikk number - int
ujuk number - reaalne
Tõsi Tõsi
Vale Vale
Puudub Null

Pythoni andmete teisendamist JSON-ks nimetatakse kodeerimisoperatsiooniks. Kodeerimine toimub JSON-i teegi meetodi abil - dumps ()

meetod dumps () teisendab pythoni sõnaraamatu objekti JSON-i stringide andmevorminguks.

Nüüd laseme oma esimese kodeerimisnäite Pythoniga läbi viia.

import jsonx = {"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}})

Loome sõnastikust JSON-faili, kasutades sama funktsiooni dump ()

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Väljund:

Pole midagi näidata

... Teie süsteemis on loodud json_file.json, mida saate seda faili kontrollida.

JSON - Python (dekodeerimine)

JSON string dekodeerimine toimub abiga sisseehitatud meetod saadetised () ja koormus () on JSON raamatukogu Python. Tõlketabelis on toodud JSON-objektide näide Pythoni objektidest, mis on kasulikud JSON-stringide Pythonis dekodeerimise teostamiseks.

JSON Python
Objekt dikteerima
Massiiv nimekiri
String unicode
number - int number - int, pikk
number - reaalne ujuk
Tõsi Tõsi
Vale Vale
Null Puudub

Vaatame Pythonis dekodeerimise põhinäidet funktsiooni json.loads () abil,

import json # json library imported# json data stringperson_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_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Väljund:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

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

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

Näide

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Siin on andmed Pythoni sõnastikuobjekt.

Väljund:

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

Kompaktne kodeerimine Pythonis

Kui peate oma JSON-faili suurust vähendama, saate Pythonis kasutada kompaktset kodeeringut.

Näide

import json# Create a List that contains dictionarylst = ['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 dictionarycompact_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 (päris print)

  • Eesmärk on kirjutada inimese jaoks arusaadavaks vormindatud kood. Ilusa printimise abil saab igaüks koodist hõlpsasti aru.
  • Näide
import jsondic = { '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}

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

JSON-koodi tellimine:

funktsiooni argument sort_keys atribuut sorteerib võtmed JSONis kasvavas järjekorras. Argument sort_keys on Boole'i ​​atribuut. Kui see on tõsi, on sortimine lubatud muidu mitte

Näide

import jsonx = {"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 võite jälgida võtmete vanust, on autod, lapsed jne järjestatud kasvavas järjekorras.

Pythoni keeruline objektide kodeerimine

Komplekssel objektil on kaks erinevat osa

  1. Päris osa
  2. Kujuteldav osa

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 eksemplari meetodi abil.

Loome konkreetse funktsiooni kontrollimiseks, kui objekt on keeruline või sobib kodeerimiseks.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Väljund:

'[4.0, 5.0]'

JSON-objekti kompleksne dekodeerimine Pythonis

JSONis keeruka objekti dekodeerimiseks kasutage parameetrit object_hook, mis kontrollib, kas JSON-string sisaldab kompleksset objekti või mitte. Näide

import json# function check JSON string contains complex objectdef 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 notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_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}

JSONi serialiseerimisklassi JSONEncoder ülevaade

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

  • vaikimisi (o) - rakendatakse alamklassis ja tagastatakse o objekti serialiseerimise objekt.
  • kodeerimine (o) - sama mis meetodil json.dumps () tagastab Pythoni andmestruktuuri JSON-stringi.
  • iterencode (o) - esindage stringi ükshaaval ja kodeerige objekt o.

JSONEncoderi klassi encode () meetodi abil saame kodeerida ka mis tahes Pythoni objekti.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Väljund:

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

Ülevaade JSONi deserialiseerimisklassist JSONDecoder

JSONDecoderi klassi kasutatakse mis tahes Pythoni objekti deserialiseerimiseks dekodeerimise ajal. See sisaldab kolme erinevat dekodeerimise meetodit, mis on

  • vaikimisi (o) - rakendatakse alamklassis ja tagastatakse deserialiseeritud objekt o objekt.
  • dekodeerimine (o) - sama mis meetodil json.loads () tagastab JSON-i stringi või andmete Pythoni andmestruktuuri.
  • raw_decode (o) - esitage Pythoni sõnastik ükshaaval ja dekodeerige objekt o.

JSONDecoder klassi dekodeerimise () meetodi abil saame dekodeerida ka JSON stringi.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Väljund:

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

JSON-i andmete dekodeerimine URL-ilt: näide reaalsest elust

Toome CityBike NYC (Bike Sharing System) andmed määratud URL-ist (https://feeds.citibikenyc.com/stations/stations.json) ja teisendame sõnastiku vormingusse.

Näide

MÄRKUS. - Veenduge, et taotluste kogu oleks teie Pythoni juba installitud. Kui ei, siis avage terminal või CMD ja tippige

  • (Python 3 või uuema versiooni puhul ) pip3 installipäringud
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Väljund:

{'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 raamatukoguga seotud erandid Pythonis:

  • Klass json.JSONDecoderError tegeleb dekodeerimise toiminguga seotud erandiga. ja see on ValueError'i alaklass .
  • Erand - json.JSONDecoderError (msg, doc)
  • Erandite parameetrid on
    • msg - vormindamata tõrketeade
    • doc - JSONi dokumendid on sõelutud
    • pos - dokumendi algusindeks, kui see ebaõnnestub
    • lino - rida ei näita pos
    • koolon - veerg nr ei vasta pos

Näide

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")

Lõputud ja NaN-numbrid Pythonis

JSON-i andmevahetusvorming (RFC - Request for Comments) ei luba lõpmatut ega nanoväärtust, kuid Python-JSON-i teegis pole piirangut lõpmatu ja nanoväärtusega seotud toimingu sooritamiseks. Kui JSON saab andmetüübi INFINITE ja Nan, kui see teisendatakse selle otseseks.

Näide

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Väljund:

InfinityNaNinf

JSONi stringi korduv võti

RFC määrab, et võtme nimi peaks olema JSON-i objektil unikaalne, kuid see pole kohustuslik. Pythoni JSON-i teek ei tõsta JSON-is korduvate objektide erandit. See ignoreerib kõiki korduvaid võtme-väärtuste paare ja arvestab nende seas ainult viimast võtme-väärtuse paari.

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

Väljund:

{'a': 3}

CLI (käsurea liides) JSON-iga Pythonis

json.tool pakub käsurea liidest JSON-ilusa printimise süntakside kinnitamiseks. Vaatame CLI näidet

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

Väljund:

{"name": " Kings Authur "}

JSONi eelised Pythonis

  • Konteineri ja väärtuse vahel on lihtne liikuda (JSON-ist Pythoni ja Pythoni-JSON-i)
  • Inimloetav (päris print) JSON-objekt
  • Kasutatakse laialdaselt andmetöötluses.
  • Ühel failil pole sama andmestruktuuri.

JSONi rakendamise piirang Pythonis

  • JSON-i vahemiku deserialiseerimisel ja arvu ennustamisel
  • JSON-i stringi maksimaalne pikkus ja JSON-i massiivid ning objekti pesitsustasemed.

Petukood

json.dumps (isiku_andmed)

Loo JSON-objekt

json.dump (isiku_andmed, faili_kirjutamine)

Looge JSON-fail, kasutades Pythoni faili sisend / väljund

compact_obj = json.dumps (andmed, eraldajad = (',', ':'))

Tihendage JSON-objekt, eemaldades eraldaja abil JSON-i objektist tühimärk

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ähestikulise järjekorra järgi

complex_obj = json.dumps (4 + 5j, vaikimisi = complex_encode)

Pythoni kompleksi objekti kodeerimine JSON-is

JSONEncoder (). Kodeeri (colour_dict)

JSONEncoderi klassi kasutamine serialiseerimiseks

json.loads (andmete_string)

JSON-stringi dekodeerimine Pythoni sõnaraamatus funktsiooni json.loads () abil

json.loads ('{"__ complex__": tõsi, "päris": 4, "img": 5}', objekti_konks = is_kompleks)

Kompleksse JSON-objekti dekodeerimine Pythoni

JSONDecoder (). Dekodeeri (värvi_string)

JSON-i dekodeerimise kasutamine Pythonis deserialiseerimisega