Python JSON: Kódolás (kiíratások), Dekódolás (betöltés) és JSON-fájl olvasása

Miben van a JSON? Python?

JSON in Python által ihletett szabványos formátum JavaSzkript adatcseréhez és adatátvitelhez szöveges formátumban hálózaton keresztül. A JSON általában karakterlánc- vagy szövegformátumú. API-k és adatbázisok használhatják, és az objektumokat név/érték párokként jeleníti meg. A JSON jelentése JavaScript objektum jelölése.

Python JSON szintaxis:

A JSON kulcs és érték párként van írva.

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

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

JSON-könyvtár itt Python

"marsall"És a"savanyú uborka' külső moduljai Python verzióját karbantartani JSON Python könyvtár. Munka a JSON-val Python a JSON-hoz kapcsolódó műveletek, például a kódolás és dekódolás végrehajtásához először meg kell tennie importál JSON-könyvtár és ehhez az Ön .py fájl

import json

A következő módszerek állnak rendelkezésre a JSON-ban Python modul

Módszer Description
guba() kódolás JSON objektumokhoz
lerak() kódolt karakterlánc írása a fájlra
loads() Dekódolja a JSON karakterláncot
Betöltés() Dekódolás JSON-fájl olvasása közben

Python JSON-ra (kódolás)

JSON könyvtára Python következő fordítását végzi el Python az objektumokat alapértelmezés szerint JSON objektumokká

Python JSON
diktálja tárgy
lista Sor
unicode Húr
szám – int, long szám – int
úszik szám – valós
Igaz Igaz
Hamis Hamis
Egyik sem Null

áttérés Python Az adatokat a JSON-ba kódolási műveletnek nevezik. A kódolás a JSON könyvtár módszer segítségével történik - guba()

A JSON kiírja () Python

json.dumps() in Python egy olyan módszer, amely átalakítja a szótár objektumait Python JSON karakterlánc adatformátumba. Akkor hasznos, ha az objektumoknak karakterlánc formátumban kell lenniük az olyan műveletekhez, mint az elemzés, a nyomtatás stb.

Most végre hajtjuk végre az első json.dumps kódolási példánkat a következővel 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)

output:

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

Lássunk egy példát Python írjon JSON-t a fájlba a szótár JSON-fájljának létrehozásához ugyanazzal a funkcióval lerak()

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

output:

Nincs mit megjeleníteni… A rendszerben létrejön a json_file.json fájl. Ellenőrizheti a fájlt az alábbiak szerint: írja be a JSON-t fájlba Python példa.

Python JSON kódolási példa

JSON ide Python (Dekódolás)

A JSON karakterlánc-dekódolás a beépített módszer segítségével történik json.loads() & json.load() JSON-könyvtárból Python. Itt a fordítási táblázat példát mutat a JSON-objektumokra Python objektumok amelyek hasznosak a dekódolás végrehajtásában Python JSON karakterláncból.

JSON Python
tárgy diktálja
Sor lista
Húr unicode
szám – int szám – int, long
szám – valós úszik
Igaz Igaz
Hamis Hamis
Null Egyik sem

Lássunk egy alapvető JSON-elemzést Python segítségével dekódolásra példa json.loads funkció,

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

output:

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

Python JSON dekódolási példa

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

Most megtanuljuk, hogyan kell beolvasni a JSON-fájlt Python dolgoztam, ahol az Python JSON elemzési példa:

JEGYZET: A JSON-fájl dekódolása a fájlbemenettel/kimenettel (I/O) kapcsolatos művelet. A JSON-fájlnak léteznie kell a rendszeren a programban megadott helyen.

Python JSON fájl olvasása Példa:

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)

Itt az adatok szótári tárgya Python ahogy az a fenti olvasott JSON-fájlban látható Python példa.

output:

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

JSON-fájl elemzése Python

Kompakt kódolás be Python

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

Példa,

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)

output:

'["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 az, hogy jól formázott kódot írjanak az emberi megértéshez. A szép nyomtatás segítségével bárki könnyen megértheti a kódot.

Példa:

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)

output:

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

JSON-kód formátuma Példa

Ennek jobb megértéséhez módosítsa a behúzást 40-re, és figyelje meg a kimenetet-

JSON-kód formátuma Példa

JSON kód megrendelése:

sort_keys tulajdonság be Python A dumps függvény argumentuma növekvő sorrendbe rendezi a kulcsot a JSON-ban. A sort_keys argumentum egy logikai attribútum. Ha igaz, a válogatás megengedett, egyébként nem. Értsük meg vele Python string to JSON rendezési példa.

Példa,

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)

output:

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

Ahogy láthatja a kulcsok korát, az autók, gyerekek stb. növekvő sorrendben vannak elrendezve.

Összetett objektum kódolása Python

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

  1. Valódi rész
  2. Képzeletbeli rész

Összetett objektum kódolása Python

Példa: 3 +2i

Egy összetett objektum kódolásának végrehajtása előtt ellenőriznie kell, hogy egy változó összetett-e vagy sem. Létre kell hoznia egy függvényt, amely egy példánymódszer segítségével ellenőrzi a változóban tárolt értéket.

Hozzuk létre az objektum összetett vagy kódolásra alkalmas ellenőrzéséhez az adott függvényt.

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)

output:

'[4.0, 5.0]'

Komplex JSON objektum dekódolás be Python

Az összetett objektum JSON-ban való 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. Lehetővé teszi, hogy megértsük a JSON-ba írt karakterlánccal Python Példa,

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)

output:

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

A JSON sorozatosítási osztály áttekintése, a JSONEncoder

A JSONEncoder osztály bármely szerializálására használható Python objektumot a kódolás végrehajtása közben. Három különböző kódolási módszert tartalmaz, amelyek

  • alapértelmezett (o) – Az alosztályban és a visszatérési serialize objektumban implementálva o tárgy.
  • kódol(o) – Ugyanaz, mint a JSON kiíratások Python metódus return JSON string of Python adatszerkezet.
  • iterencode(o) – Egyesével ábrázolja a karakterláncot, és kódolja az o objektumot.

A JSONEncoder osztály encode() metódusa segítségével bármilyen kódolható Python tárgyat az alábbiak szerint Python JSON kódoló példa.

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

output:

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

A JSON Deserialization osztály JSONDecoder áttekintése

A JSONDecoder osztály bármely deszerializálására használható Python objektumot dekódolás közben. Három különböző dekódolási módszert tartalmaz, amelyek

  • alapértelmezett (o) – Az alosztályban implementálva, és visszaadja a deserializált objektumot o tárgy.
  • dekódolás(o) – Ugyanaz, mint a json.loads() metódus visszatérése Python JSON karakterlánc vagy adat adatszerkezete.
  • nyers_dekód(o) – Képviseli Python szótár egyesével és dekódolja az o objektumot.

A JSONDecoder osztály decode() metódusával a JSON karakterláncot is dekódolhatjuk az alábbiak szerint Python JSON dekóder példa.

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)

output:

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

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

A CityBike NYC (Bike Sharing System) adatait a megadott URL-ről (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json), és konvertálja szótár formátumba.

Python JSON betöltése fájlból Példa:

MEGJEGYZÉS: - Győződjön meg arról, hogy a kérések könyvtára már telepítve van Python, Ha nem, nyissa meg a terminált vagy a CMD-t, és írja be

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

output:

<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-könyvtárral kapcsolatos kivételek itt Python:

  • Osztály json.JSONDecoderError kezeli a dekódolási művelettel kapcsolatos kivételt. és ez egy alosztálya ValueError.
  • Kivétel - json.JSONDecoderError(msg, doc)
  • A kivétel paraméterei:
    • msg – Formázatlan hibaüzenet
    • doc – JSON-dokumentumok elemzése megtörtént
    • pos – a doc index indítása, ha az meghiúsult
    • lineno – a nem mutatott sorok megfelelnek a poz
    • kettőspont – az oszlop nem felel meg a poz

Python JSON betöltése fájlból Példa:

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-könyvtár itt Python

Végtelen és NaN Numbers in Python

A JSON Data Interchange Format (RFC – Request For Comments) nem engedélyezi a végtelen vagy a Nan értéket, de nincs korlátozás Python- JSON Library végtelen és Nan értékkel kapcsolatos műveletek végrehajtásához. Ha a JSON INFINITE és Nan adattípust kap, akkor azt literálra konvertálja.

Példa,

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

output:

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

Ismétlődő kulcs a JSON karakterláncban

Az RFC meghatározza, hogy a kulcsnévnek egyedinek kell lennie egy JSON-objektumban, de ez nem kötelező. Python A JSON-könyvtár nem tesz kivételt a JSON-ban ismétlődő objektumokról. Figyelmen kívül hagyja az összes ismétlődő kulcs-érték párt, és ezek közül csak az utolsó kulcs-érték párt veszi figyelembe.

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

output:

{'a': 3}

CLI (Command Line Interface) JSON-val Python

json.tool parancssori felületet biztosít a JSON pretty-print szintaxis ellenőrzéséhez. Lássunk egy példát a CLI-re

Parancssori interfész JSON-val

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

output:

{
    "name": " Kings Authur "
}

A JSON előnyei Python

  • Könnyen visszahelyezhető a tároló és az érték között (JSON to Python és a Python JSON-ra)
  • Ember által olvasható (Pretty-print) JSON-objektum
  • Széles körben használják az adatkezelésben.
  • Nem ugyanaz az adatstruktúra az egyetlen fájlban.

A JSON megvalósítási korlátai itt Python

  • A JSON-tartomány deszerializálójában és egy szám előrejelzésében
  • A JSON karakterlánc és JSON tömbök maximális hossza, valamint az objektum beágyazott szintjei.

Python JSON csalólap

Python JSON funkció Description
json.dumps(person_data) JSON-objektum létrehozása
json.dump(person_data, file_write) JSON-fájl létrehozása a fájl I/O használatával Python
compact_obj = json.dumps(data, separators=(',',':')) Tömörítse a JSON-objektumot a szóköz karakterek eltávolításával a JSON-objektumból elválasztó segítségével
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) JSON-kód formázása a behúzással
sorted_string = json.dumps(x, indent=4, sort_keys=True) JSON-objektumkulcs rendezése ábécé sorrendben
komplex_obj = json.dumps(4 + 5j, alapértelmezett=komplex_kódolás) Python Komplex objektumkódolás JSON-ban
JSONEncoder().encode(colour_dict) JSONEncoder osztály használata a sorosításhoz
json.loads(data_string) JSON karakterlánc dekódolása Python szótár a json.loads() függvény használatával
json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex) Komplex JSON-objektum dekódolása ide Python
JSONDecoder().decode(color_string) Dekódoló JSON használata a Python deszerializációval