Python JSON: kódování (výpis), dekódování (načítání) dat JSON & Soubor (příklad)

Obsah:

Anonim

Co je JSON?

JSON je standardní formát pro výměnu dat, který je inspirován JavaScriptem. Obecně je JSON ve formátu řetězce nebo textu. JSON znamená J ava S cript O bject N otation.

Syntaxe JSON: JSON je zapsána jako pár klíčů a hodnot.

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

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

Knihovna JSON v Pythonu

' maršál ' a ' nálev' externí moduly Pythonu udržují verzi knihovny JSON . Chcete-li provádět operace související s JSON, jako je kódování a dekódování v Pythonu, musíte nejprve importovat knihovnu JSON, a to do souboru .py ,

import json

V modulu JSON jsou k dispozici následující metody

Metoda Popis
skládky () kódování do objektů JSON
výpis () kódovaný řetězec zápisu do souboru
zatížení () Dekódujte řetězec JSON
zatížení() Dekódujte při čtení souboru JSON

Python to JSON (kódování)

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

Krajta JSON
diktát Objekt
seznam Pole
unicode Tětiva
číslo - int, dlouhé číslo - int
plovák číslo - skutečné
Skutečný Skutečný
Nepravdivé Nepravdivé
Žádný Nula

Převod dat Pythonu na JSON se nazývá operace kódování. Kódování se provádí pomocí metody knihovny JSON - dumps ()

metoda dumps () převádí objekt slovníku pythonu do datového formátu řetězce JSON.

Nyní můžeme provést náš první příklad kódování pomocí Pythonu.

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

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

Vytvořme soubor JSON slovníku pomocí stejné funkce 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ýstup:

Nic k vidění

… Ve vašem systému je vytvořen soubor json_file.json, který můžete zkontrolovat.

JSON do Pythonu (dekódování)

Dekódování řetězec JSON se provádí pomocí vestavěné metody zatížení () a load () z JSON knihovny v Pythonu. Zde překladová tabulka ukazuje příklad objektů JSON na objekty Pythonu, které jsou užitečné při provádění dekódování v řetězci JSON v Pythonu.

JSON Krajta
Objekt diktát
Pole seznam
Tětiva unicode
číslo - int číslo - int, dlouhé
číslo - skutečné plovák
Skutečný Skutečný
Nepravdivé Nepravdivé
Nula Žádný

Podívejme se na základní příklad dekódování v Pythonu pomocí funkce json.loads () ,

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

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

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

POZNÁMKA: Dekódování souboru JSON je operace související se vstupem a výstupem souboru (I / O). Soubor JSON musí ve vašem systému existovat na zadaném místě, které zmiňujete ve svém programu.

Příklad,

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)

Zde jsou data slovníkovým objektem Pythonu.

Výstup:

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

Kompaktní kódování v Pythonu

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

Příklad,

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ý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átovat kód JSON (pěkný tisk)

  • Cílem je napsat dobře naformátovaný kód pro lidské porozumění. S pomocí hezkého tisku může každý snadno pochopit kód.
  • Příklad,
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ýstup:

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

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

Objednání kódu JSON:

Atribut sort_keys v argumentu funkce dumps () roztřídí klíč ve formátu JSON ve vzestupném pořadí. Argument sort_keys je booleovský atribut. Když je to pravda, třídění je povoleno, jinak ne

Příklad,

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ý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 sledovat věk klíčů, auta, děti atd. Jsou seřazeny vzestupně.

Komplexní kódování objektů Pythonu

Složitý objekt má dvě různé části

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

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.

Vytvořme specifickou funkci pro kontrolní objekt je složitý nebo vhodný pro kódování.

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

'[4.0, 5.0]'

Složité dekódování objektů JSON v Pythonu

Chcete-li dekódovat složitý objekt v JSON, použijte parametr object_hook, který kontroluje, zda řetězec JSON obsahuje složitý objekt nebo ne. Příklad,

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

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

Přehled třídy JSON Serialization JSONEncoder

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

  • default (o) - Implementováno v podtřídě a vrátit serializovaný objekt pro o objekt.
  • encode (o) - Stejné jako metoda json.dumps () vrací řetězec JSON datové struktury Pythonu.
  • iterencode (o) - představuje řetězec jeden po druhém a kóduje objekt o.

Pomocí metody encode () třídy JSONEncoder můžeme také kódovat jakýkoli objekt Pythonu.

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

Výstup:

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

Přehled třídy desonializace JSON JSONDecoder

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

  • default (o) - Implementováno v podtřídě a vrátit deserializovaný objekt o objekt.
  • decode (o) - Stejné jako metoda json.loads () vrací datovou strukturu Pythonu řetězce JSON nebo dat.
  • raw_decode (o) - reprezentuje jeden po druhém slovník Pythonu a dekóduje objekt o.

Pomocí metody decode () třídy JSONDecoder můžeme také dekódovat řetězec JSON.

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

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

Dekódování dat JSON z URL: Příklad z reálného života

Načteme data CityBike NYC (Bike Sharing System) ze zadané adresy URL (https://feeds.citibikenyc.com/stations/stations.json) a převedeme do formátu slovníku.

Příklad,

POZNÁMKA: - Ujistěte se, že knihovna požadavků je ve vašem Pythonu již nainstalována. Pokud ne, otevřete terminál nebo CMD a zadejte

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

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

  • 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 - analyzovány dokumenty JSON
    • pos - spustit index dokumentu, když selhal
    • lineno - řádek žádné výstavy odpovídají poz
    • dvojtečka - sloupec neodpovídá poz

Příklad,

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

Nekonečná a NaN čísla v Pythonu

Formát JSON Data Interchange Format (RFC - žádost o komentáře) neumožňuje nekonečnou nebo nanovou hodnotu, ale v knihovně Python-JSON není žádné omezení k provádění operací souvisejících s nekonečnou a nanovou hodnotou. Pokud JSON získá datový typ INFINITE a Nan, převede jej na doslovný.

Příklad,

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

InfinityNaNinf

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é. Knihovna JSON v Pythonu nevyvolává výjimku opakovaných objektů v JSON. Ignoruje všechny opakované páry klíč – hodnota a zvažuje mezi nimi pouze poslední pár klíč – hodnota.

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

Výstup:

{'a': 3}

CLI (rozhraní příkazového řádku) s JSON v Pythonu

json.tool poskytuje rozhraní příkazového řádku k ověření syntaxe JSON pretty-print. Podívejme se na příklad CLI

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

Výstup:

{"name": " Kings Authur "}

Výhody JSON v Pythonu

  • Snadný přesun zpět mezi kontejnerem a hodnotou (JSON pro Python a Python pro JSON)
  • Lidsky čitelný (hezký tisk) objekt JSON
  • Široce se používá při zpracování dat.
  • Nemá stejnou datovou strukturu v jediném souboru.

Omezení implementace JSON v Pythonu

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

Podvádět kód

json.dumps (person_data)

Vytvořte objekt JSON

json.dump (person_data, file_write)

Vytvořte soubor JSON pomocí File I / O v Pythonu

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í

tříděný_řetězec = json.dumps (x, odsazení = 4, sort_keys = True)

Třídění klíče objektu JSON podle abecedního pořadí

complex_obj = json.dumps (4 + 5j, výchozí = komplexní_kód)

Kódování komplexních objektů Python v JSON

JSONEncoder (). Encode (colour_dict)

Použití třídy JSONEncoder pro serializaci

json.loads (datový_řetězec)

Dekódování řetězce JSON ve slovníku Pythonu pomocí funkce json.loads ()

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

Dekódování komplexního objektu JSON do Pythonu

JSONDecoder (). Decode (color_string)

Použití dekódování JSON na Python s deserializací