Python JSON: kódolás (dump), dekódolás (betöltés) json Data & Fájl (példa)

Tartalomjegyzék:

Anonim

Mi a JSON?

A JSON az adatcsere szabványos formátuma, amelyet a JavaScript ihletett. Általában a JSON karakterlánc vagy szöveg formátumban van. JSON jelentése J Ava S cript O bject N otation.

A JSON szintaxisa: A JSON kulcs- és értékpárként van megírva.

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

A JSON nagyon hasonlít a Python szótárhoz. A Python támogatja a JSON-ot, és JSON-ként beépített könyvtárral rendelkezik.

JSON könyvtár Pythonban

A Python ' marsall ' és ' pickle' külső moduljai fenntartják a JSON könyvtár verzióját . A JSON-hoz kapcsolódó műveletek (például kódolás és dekódolás Pythonban) végrehajtásához először importálnia kell a JSON könyvtárat, és ehhez a .py fájlba,

import json

A következő módszerek állnak rendelkezésre a JSON modulban

Módszer Leírás
guba() kódolás JSON objektumokra
lerak() kódolt karakterlánc fájlba
terhelések () Dekódolja a JSON karakterláncot
Betöltés() Dekódoljon a JSON fájl olvasása közben

Python - JSON (kódolás)

A JSON Python-könyvtár alapértelmezés szerint a Python-objektumok JSON-objektumokká történő fordítását hajtja végre

Piton JSON
diktálja Tárgy
lista Sor
unicode Húr
szám - int, hosszú szám - int
úszó szám - valós
Igaz Igaz
Hamis Hamis
Egyik sem Nulla

A Python-adatok JSON-vá konvertálását kódolási műveletnek nevezzük. A kódolás a JSON könyvtári módszer segítségével történik - dumps ()

A dumps () metódus konvertálja a python szótár objektumát JSON karakterlánc adatformátumba.

Most végre tudjuk hajtani az első kódolási példát a Python-tal.

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)

Kimenet:

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

Hozzunk létre egy JSON fájlt a szótárból ugyanazon függvény dump () használatával

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

Kimenet:

Nincs mit mutatni

... A rendszerben létrehozva a json_file.json fájlt ellenőrizheti.

JSON - Python (dekódolás)

A JSON karakterlánc dekódolása a JSON könyvtár beépített metódusainak () és load () segítségével történik a Pythonban. A fordítási táblázat bemutatja a JSON objektumok példáját Python objektumokra, amelyek hasznosak a dekódolás végrehajtásához a JSON karakterlánc Pythonban.

JSON Piton
Tárgy diktálja
Sor lista
Húr unicode
szám - int szám - int, hosszú
szám - valós úszó
Igaz Igaz
Hamis Hamis
Nulla Egyik sem

Nézzük meg a Python dekódolásának alapvető példáját a json.loads () függvény segítségével,

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

Kimenet:

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

JSON fájl dekódolása vagy JSON fájl elemzése Pythonban

MEGJEGYZÉS: A JSON fájl dekódolása a File Input / Output (I / O) fájlhoz kapcsolódó művelet. A JSON fájlnak léteznie kell a rendszeren a megadott helyen, amelyet a programjában megemlít.

Példa,

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)

Itt az adatok a Python szótár objektuma.

Kimenet:

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

Kompakt kódolás Pythonban

Ha csökkentenie kell a JSON fájl méretét, használhatja a Python kompakt kódolását.

Példa,

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)

Kimenet:

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

JSON-kód formázása (szép nyomtatás)

  • A cél egy jól formázott kód megírása az emberi megértés érdekében. A szép nyomtatás segítségével bárki könnyen megértheti a kódot.
  • Példa,
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)

Kimenet:

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

Ennek jobb megértése érdekében módosítsa a francia bekezdést 40-re, és figyelje meg a kimeneti

JSON kód megrendelése:

A sort_keys attribútum a dumps () függvény argumentumában növekvő sorrendben rendezi a kulcsot a JSON-ban. A sort_keys argumentum logikai attribútum. Ha igaz, a rendezés megengedett, különben nem

Példa,

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)

Kimenet:

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

Amint megfigyelheti a kulcsok életkorát, az autók, a gyerekek stb. Növekvő sorrendben vannak elrendezve.

A Python összetett objektumkódolása

Egy komplex objektumnak két különböző része van

  1. Igazi rész
  2. Képzeletbeli rész

Példa: 3 + 2i

Egy komplex objektum kódolásának elvégzése előtt ellenőriznie kell, hogy egy változó összetett-e vagy sem. Létre kell hoznia egy függvényt, amely egy változóban tárolt értéket egy példány módszerrel ellenőrzi.

Hozzuk létre az ellenőrző objektum speciális funkcióját, amely összetett vagy alkalmas kódolásra.

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)

Kimenet:

'[4.0, 5.0]'

Komplex JSON objektum dekódolás Pythonban

Komplex objektum JSON-ban történő dekódolásához használjon egy object_hook paramétert, amely ellenőrzi, hogy a JSON karakterlánc tartalmazza-e az összetett objektumot, vagy sem. Példa,

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)

Kimenet:

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

A JSON Serialization osztály áttekintése JSONEncoder

A JSONEncoder osztály bármely Python-objektum sorosítására szolgál a kódolás végrehajtása közben. Három különböző kódolási módszert tartalmaz

  • alapértelmezett (o) - megvalósítva az alosztályban, és visszaadja az o objektum serialize objektumát.
  • encode (o) - Ugyanaz, mint a json.dumps () metódus, a Python adatstruktúra JSON karakterláncát adja vissza.
  • iterencode (o) - Egyesével ábrázolja a karakterláncot, és az o objektumot kódolja.

A JSONEncoder osztály encode () metódusának segítségével bármilyen Python objektumot is kódolhatunk.

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

Kimenet:

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

A JSON deserializációs osztályának áttekintése JSONDecoder

A JSONDecoder osztály bármely Python-objektum deszeriálizálására szolgál dekódolás közben. Három különböző dekódolási módszert tartalmaz

  • alapértelmezett (o) - végrehajtva az alosztályban, és visszaadja a deserializált objektum o objektumot.
  • decode (o) - Ugyanaz, mint a json.loads () metódus, a JSON karakterlánc vagy adat Python adatstruktúráját adja vissza.
  • raw_decode (o) - Egyenként ábrázolja a Python szótárt, és dekódolja az o objektumot.

A JSONDecoder osztály decode () metódusának segítségével dekódolhatjuk a JSON karakterláncot is.

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

Kimenet:

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

A JSON-adatok dekódolása az URL-ből: Példa valós életre

Meghívjuk a CityBike NYC (Bike Sharing System) adatait a megadott URL-ről (https://feeds.citibikenyc.com/stations/stations.json), és átalakítjuk szótár formátumba.

Példa,

MEGJEGYZÉS: - Győződjön meg róla, hogy a Python könyvtár már telepítve van a Pythonba. Ha nem, akkor nyissa meg a Terminált vagy a CMD-t, és írja be

  • (Python 3 vagy újabb esetén) pip3 telepítési kérelmek
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])

Kimenet:

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

A JSON könyvtárral kapcsolatos kivételek a Pythonban:

  • A json.JSONDecoderError osztály kezeli a dekódolási művelettel kapcsolatos kivételt. és ez a ValueError egyik alosztálya .
  • Kivétel - json.JSONDecoderError (msg, doc)
  • A kivétel paraméterei:
    • msg - Formázatlan hibaüzenet
    • doc - JSON docs elemezve
    • pos - a doc index indítása, ha nem sikerült
    • lino - a sor nem mutat megfelel a pos
    • kettőspont - oszlop nem felel meg a poz

Példa,

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

Végtelen és NaN számok a Pythonban

A JSON adatcsere-formátum (RFC - megjegyzéskérés) nem engedélyezi a Végtelen vagy a Nan értéket, de a Python-JSON könyvtárban nincs korlátozás a Végtelen és a Nan értékkel kapcsolatos műveletek végrehajtására. Ha a JSON végtelen és Nan adattípust kap, akkor azt literálissá konvertálja.

Példa,

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

Kimenet:

InfinityNaNinf

Ismételt kulcs a JSON karakterláncban

Az RFC megadja, hogy a kulcs nevének egyedinek kell lennie egy JSON objektumban, de ez nem kötelező. A Python JSON könyvtár nem vet fel a JSON-ban ismétlődő objektumok kivételét. Figyelmen kívül hagy minden ismételt kulcs-érték párot, és csak az utolsó kulcs-érték párokat veszi figyelembe közöttük.

  • Példa,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Kimenet:

{'a': 3}

CLI (parancssori interfész) JSON-nal Pythonban

A json.tool biztosítja a parancssori felületet a JSON szép nyomtatású szintaxisának érvényesítéséhez. Lássunk egy példát a CLI-re

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

Kimenet:

{"name": " Kings Authur "}

A JSON előnyei a Pythonban

  • Könnyen vissza lehet lépni a tároló és az érték között (JSON - Python és Python - JSON)
  • Ember által olvasható (szép nyomtatású) JSON Object
  • Széles körben használják az adatkezelésben.
  • Nem ugyanaz az adatstruktúra az egyetlen fájlban.

A JSON megvalósításának korlátozása a Pythonban

  • A JSON tartomány deserializálójában és egy szám előrejelzésében
  • A JSON karaktersorozat és a JSON tömbök maximális hossza és az objektum fészkelési szintjei.

Cheat Code

json.dumps (személy_adatok)

Hozzon létre JSON-objektumot

json.dump (személy_adatok, fájl_írása)

Hozzon létre JSON fájlt a Python fájl I / O használatával

compact_obj = json.dumps (adatok, elválasztók = (',', ':'))

Tömörítse a JSON-objektumot azáltal, hogy elválasztó segítségével eltávolítja a szóköz karaktert a JSON-objektumból

formatted_obj = json.dumps (dic, behúzás = 4, elválasztók = (',', ':'))

JSON-kód formázása a behúzással

sorted_string = json.dumps (x, behúzás = 4, sort_keys = True)

A JSON objektumkulcs rendezése ábécé sorrend szerint

complex_obj = json.dumps (4 + 5j, alapértelmezett = complex_encode)

Python Complex objektum kódolás JSON-ban

JSONEncoder (). Kódolás (colour_dict)

A JSONEncoder osztály használata a sorosításhoz

json.loads (data_string)

A JSON karakterlánc dekódolása a Python szótárban a json.loads () függvény használatával

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Bonyolult JSON objektum dekódolása Pythonba

JSONDecoder (). Dekódol (colour_string)

A JSON dekódolása Pythonba deserializációval