Python JSON: Kódovat (vypíše), Dekódovat (načte) a číst soubor JSON

V čem je JSON Python?

JSON in Python je standardní formát inspirovaný JavaSkript pro výměnu dat a přenos dat v textovém formátu po síti. Obecně je JSON ve formátu řetězce nebo textu. Mohou jej používat rozhraní API a databáze a představuje objekty jako dvojice název/hodnota. JSON znamená JavaZápis objektu skriptu.

Python Syntaxe JSON:

JSON je zapsán jako pár klíč a hodnota.

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

JSON je velmi podobný Python slovník. Python podporuje JSON a má vestavěnou knihovnu jako JSON.

Knihovna JSON v Python

"maršál' a 'lák' externí moduly Python udržovat verzi JSON Python knihovna. Práce s JSON v Python Chcete-li provádět operace související s JSON, jako je kódování a dekódování, musíte nejprve import Knihovna JSON a k tomu ve vašem .py Soubor,

import json

V JSON jsou k dispozici následující metody Python modul

Metoda Description
skládky() kódování do objektů JSON
vyhodit() zápis zakódovaného řetězce do souboru
načte() Dekódujte řetězec JSON
zatížení() Dekódujte při čtení souboru JSON

Python na JSON (kódování)

JSON Knihovna Python provádí následující překlad Python objekty do objektů JSON ve výchozím nastavení

Python JSON
dict Objekt
lest Řada
unicode Řetězec
číslo – int, long číslo – int
vznášet se číslo – skutečné
Pravdivý Pravdivý
Falešný Falešný
Nevyplněno Null

Konvertování Python data do JSON se nazývá operace kódování. Kódování se provádí pomocí metody knihovny JSON – skládky()

JSON vypíše() do Python

json.dumps() in Python je metoda, která převádí objekty slovníku Python do datového formátu řetězce JSON. Je užitečné, když je požadováno, aby objekty byly ve formátu řetězce pro operace, jako je analýza, tisk atd.

Nyní provedeme náš první příklad kódování json.dumps s 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ýstup:

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

Podívejme se na příklad Python zápis JSON do souboru pro vytvoření souboru JSON slovníku pomocí stejné funkce vyhodit()

# 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ýstup:

Nic k zobrazení…Ve vašem systému je vytvořen soubor json_file.json. Tento soubor můžete zkontrolovat, jak je znázorněno v níže uvedeném zápisu JSON do souboru Python příklad.

Python Příklad kódování JSON

JSON do Python (Dekódování)

Dekódování řetězce JSON se provádí pomocí vestavěné metody json.loads() & json.load() knihovny JSON v Python. Zde překladová tabulka ukazuje příklad objektů JSON do Python Objekty které jsou užitečné při provádění dekódování Python řetězce JSON.

JSON Python
Objekt dict
Řada lest
Řetězec unicode
číslo – int číslo – int, long
číslo – skutečné vznášet se
Pravdivý Pravdivý
Falešný Falešný
Null Nevyplněno

Podívejme se na základní analýzu JSON Python příklad dekódování s pomocí json.loads funkce,

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ýstup:

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

Python Příklad dekódování JSON

Dekódování souboru JSON nebo analýza souboru JSON Python

Nyní se naučíme, jak číst soubor JSON Python s Python příklad analýzy JSON:

POZNÁMKA: Dekódování souboru JSON je operace související se vstupem/výstupem souboru (I/O). Soubor JSON musí existovat ve vašem systému v určeném umístění, které uvádíte ve svém programu.

Python číst soubor JSON Příklad:

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)

Zde údaje je slovníkovým objektem Python jak je znázorněno ve výše uvedeném souboru JSON Python příklad.

Výstup:

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

Analýza souboru JSON Python

Kompaktní kódování v Python

Pokud potřebujete zmenšit velikost souboru JSON, můžete použít kompaktní kódování Python.

Příklad,

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ýstup:

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

Formát kódu JSON (pěkný tisk)

  • Cílem je napsat dobře naformátovaný kód pro lidské porozumění. S pomocí pěkného tisku může každý snadno pochopit kód.

Příklad:

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ýstup:

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

Příklad formátu kódu JSON

Abyste tomu lépe porozuměli, změňte odsazení na 40 a sledujte

Příklad formátu kódu JSON

Objednání kódu JSON:

sort_keys atribut v Python argument funkce dumps seřadí klíč v JSON vzestupně. Argument sort_keys je booleovský atribut. Když je to pravda, třídění je povoleno, jinak ne. Pojďme si rozumět s Python příklad řazení řetězce do JSON.

Příklad,

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ýstup:

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

Jak můžete pozorovat stáří klíčů, auta, děti atd. jsou uspořádány vzestupně.

Komplexní kódování objektů Python

Komplexní objekt má dvě různé části

  1. Skutečná část
  2. Imaginární část

Komplexní kódování objektů Python

Příklad: 3 +2i

Před provedením kódování složitého objektu musíte zkontrolovat, zda je proměnná složitá nebo ne. Musíte vytvořit funkci, která kontroluje hodnotu uloženou v proměnné pomocí metody instance.

Pojďme vytvořit specifickou funkci pro kontrolu, zda je objekt složitý nebo vhodný pro kódování.

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ýstup:

'[4.0, 5.0]'

Komplexní dekódování JSON objektů Python

Chcete-li dekódovat komplexní objekt v JSON, použijte parametr object_hook, který kontroluje, zda řetězec JSON obsahuje komplexní objekt nebo ne. Pojďme si rozumět s řetězcem do JSON Python Příklad,

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ýstup:

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

Přehled serializační třídy JSON JSONEncoder

Třída JSONEncoder se používá pro serializaci libovolného Python objekt při provádění kódování. Obsahuje tři různé metody kódování, které jsou

  • výchozí (o) – Implementováno v podtřídě a vrátit objekt serializace pro o objekt.
  • kódovat (o) – Stejné jako výpisy JSON Python metoda vrací řetězec JSON Python datová struktura.
  • iterencode(o) – Reprezentovat řetězec jeden po druhém a kódovat objekt o.

Pomocí metody encode() třídy JSONEncoder můžeme také zakódovat libovolné Python objekt, jak je znázorněno níže Python Příklad kodéru JSON.

# 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ýstup:

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

Přehled třídy deserializace JSON JSONDecoder

Třída JSONDecoder se používá pro deserializaci libovolného Python objekt při provádění dekódování. Obsahuje tři různé metody dekódování, které jsou

  • výchozí (o) – Implementováno v podtřídě a vrátit deserializovaný objekt o objekt.
  • dekódovat (o) – Stejné jako návrat metody json.loads(). Python datová struktura řetězce nebo dat JSON.
  • raw_decode(o) – Reprezentovat Python slovník jeden po druhém a dekódujte objekt o.

Pomocí metody decode() třídy JSONDecoder můžeme také dekódovat řetězec JSON, jak je znázorněno níže Python Příklad dekodéru JSON.

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ýstup:

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

Dekódování dat JSON z adresy URL: Příklad ze skutečného života

Načteme data CityBike NYC (systém sdílení kol) ze zadané adresy URL (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) a převést do formátu slovníku.

Python načíst JSON ze souboru Příklad:

POZNÁMKA: Ujistěte se, že knihovna požadavků je již ve vašem počítači nainstalována Python, Pokud ne, otevřete Terminál nebo CMD a zadejte

  • (Pro Python 3 nebo vyšší) požadavky na instalaci pip3
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ýstup:

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

Výjimky související s knihovnou JSON v Python:

  • Třída json.JSONDecoderError zpracovává výjimku související s operací dekódování. a je to podtřída ValueError.
  • Výjimka - json.JSONDecoderError(msg, doc)
  • Parametry výjimky jsou,
    • msg – Neformátovaná chybová zpráva
    • doc – analyzované dokumenty JSON
    • pos – spuštění indexu dokumentu, když selže
    • lineno – řádky bez zobrazení odpovídají poz
    • dvojtečka – sloupec č odpovídá poz

Python načíst JSON ze souboru Příklad:

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

Knihovna JSON v Python

Nekonečné a NaN Numbers in Python

Formát JSON Data Interchange Format (RFC – Request For Comments) nepovoluje Infinite nebo Nan Value, ale neexistuje žádné omezení v Python- Knihovna JSON pro provádění operací souvisejících s nekonečnou a hodnotou Nan. Pokud JSON získá INFINITE a datový typ Nan, převede se na doslovný.

Příklad,

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ýstup:

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

Opakovaný klíč v řetězci JSON

RFC určuje, že název klíče by měl být v objektu JSON jedinečný, ale není to povinné. Python Knihovna JSON nevyvolává výjimku opakovaných objektů v JSON. Ignoruje všechny opakované páry klíč–hodnota a bere v úvahu pouze poslední pár klíč–hodnota z nich.

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

Výstup:

{'a': 3}

CLI (Command Line Interface) se vstupem JSON Python

json.tool poskytuje rozhraní příkazového řádku pro ověření syntaxe pěkného tisku JSON. Podívejme se na příklad CLI

Rozhraní příkazového řádku s JSON

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

Výstup:

{
    "name": " Kings Authur "
}

Výhody JSON v Python

  • Snadný přechod zpět mezi kontejnerem a hodnotou (JSON na Python si Python do JSON)
  • Objekt JSON čitelný pro člověka (Docela tisk).
  • Široce používané při zpracování dat.
  • Nemá stejnou datovou strukturu v jednom souboru.

Omezení implementace JSON v Python

  • V deserializátoru rozsahu JSON a predikci čísla
  • Maximální délka řetězce JSON a pole JSON a úrovně vnoření objektu.

Python Cheat Sheet JSON

Python Funkce JSON Description
json.dumps(person_data) Vytvořte objekt JSON
json.dump(person_data, file_write) Vytvořte soubor JSON pomocí File I/O of Python
compact_obj = json.dumps(data, separators=(',',':')) Kompaktní objekt JSON odstraněním znaku mezery z objektu JSON pomocí oddělovače
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Formátování kódu JSON pomocí odsazení
sorted_string = json.dumps(x, indent=4, sort_keys=True) Třídění klíče objektu JSON podle abecedního pořadí
complex_obj = json.dumps(4 + 5j, default=complex_encode) Python Komplexní kódování objektů v JSON
JSONEncoder().encode(color_dict) Použití třídy JSONEncoder pro serializaci
json.loads(data_string) Dekódování řetězce JSON Python slovník pomocí funkce json.loads().
json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) Dekódování složitého objektu JSON do Python
JSONDecoder().decode(řetězec_barvy) Použití dekódování JSON na Python s deserializací