Python JSON: kódovanie (výpis), dekódovanie (načítanie) údajov json & Súbor (príklad)

Obsah:

Anonim

Čo je to JSON?

JSON je štandardný formát na výmenu údajov, ktorý je inšpirovaný jazykom JavaScript. Všeobecne je formát JSON v textovom alebo textovom formáte. JSON znamená J ava S Cripta O bject N otation.

Syntax JSON: JSON je zapísaná ako pár kľúča a hodnoty.

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

JSON je veľmi podobný slovníku Python. Python podporuje JSON a má zabudovanú knižnicu ako JSON.

Knižnica JSON v Pythone

' maršal ' a ' nakladanie' externých modulov Pythonu udržiava verziu knižnice JSON . Ak chcete vykonávať operácie spojené s JSON, ako je kódovanie a dekódovanie v Pythone, musíte najskôr importovať knižnicu JSON a to do svojho súboru .py ,

import json

V module JSON sú k dispozícii nasledujúce metódy

Metóda Popis
skládky () kódovanie do objektov JSON
výpis () kódovaný reťazec zapisujúci do súboru
zaťaženia () Dekódujte reťazec JSON
naložiť() Dekódujte pri načítaní súboru JSON

Python to JSON (kódovanie)

Knižnica JSON v Pythone štandardne vykonáva nasledujúci preklad objektov Pythonu do objektov JSON

Python JSON
diktát Objekt
zoznam Pole
unicode String
číslo - int, dlhé číslo - int
plavák číslo - skutočné
Pravdaže Pravdaže
Falošné Falošné
Žiadne Nulový

Konverzia dát Pythonu na JSON sa nazýva operácia kódovania. Kódovanie sa vykonáva pomocou metódy knižnice JSON - dumps ()

metóda dumps () prevádza slovníkový objekt pythonu na dátový formát reťazca JSON.

Teraz môžeme vykonať náš prvý príklad kódovania v Pythone.

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

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

Vytvorme súbor JSON slovníka pomocou rovnakej funkcie 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ýkon:

Niet čo ukázať

... Vo vašom systéme je vytvorený súbor json_file.json, ktorý môžete skontrolovať.

JSON - Python (dekódovanie)

Dekódovanie reťazec JSON sa vykonáva pomocou vstavanej metódy zaťaženie () a load () z JSON knižnice v Pythone. Tu prekladová tabuľka zobrazuje príklad objektov JSON na objekty Pythonu, ktoré sú užitočné pri vykonávaní dekódovania reťazca JSON v Pythone.

JSON Python
Objekt diktát
Pole zoznam
String unicode
číslo - int číslo - int, dlhé
číslo - skutočné plavák
Pravdaže Pravdaže
Falošné Falošné
Nulový Žiadne

Pozrime sa na základný príklad dekódovania v Pythone pomocou funkcie 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ýkon:

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

Dekódovanie súboru JSON alebo analýza súboru JSON v Pythone

POZNÁMKA: Dekódovanie súboru JSON súvisí s operáciou File Input / Output (I / O). Súbor JSON musí existovať vo vašom systéme na zadanom mieste, ktoré ste spomenuli vo svojom programe.

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

Dáta sú slovníkovým objektom Pythonu.

Výkon:

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

Kompaktné kódovanie v Pythone

Ak potrebujete zmenšiť veľkosť svojho súboru JSON, môžete v Pythone použiť kompaktné kódovanie.

Prí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ýkon:

'["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átovať kód JSON (pekná tlač)

  • Cieľom je napísať dobre naformátovaný kód pre ľudské porozumenie. Pomocou peknej tlače môže kód každý ľahko pochopiť.
  • Prí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ýkon:

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

Aby ste tomu lepšie porozumeli, zmeňte odsadenie na 40 a sledujte výstup

Objednávanie kódu JSON:

Atribút sort_keys v argumente funkcie dumps () zoradí kľúč v JSON vzostupne. Argument sort_keys je boolovský atribút. Ak je to pravda, triedenie je povolené, inak nie

Prí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ýkon:

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

Ako môžete pozorovať vek kľúčov, autá, deti atď. Sú zoradené vzostupne.

Komplexné kódovanie objektov Pythonu

Komplexný objekt má dve rôzne časti

  1. Skutočná časť
  2. Imaginárna časť

Príklad: 3 + 2i

Pred vykonaním kódovania zložitého objektu musíte skontrolovať, či je premenná zložitá alebo nie. Musíte vytvoriť funkciu, ktorá skontroluje hodnotu uloženú v premennej pomocou inštančnej metódy.

Vytvorme konkrétnu funkciu pre kontrolný objekt, ktorý je zložitý alebo vhodný na kódovanie.

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

'[4.0, 5.0]'

Komplexné dekódovanie objektov JSON v Pythone

Na dekódovanie zložitého objektu v JSON použite parameter object_hook, ktorý kontroluje, či reťazec JSON obsahuje komplexný objekt alebo nie. Prí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ýkon:

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

Prehľad triedy serializácie JSON JSONEncoder

Trieda JSONEncoder sa používa na serializáciu ľubovoľného objektu Python počas kódovania. Obsahuje tri rôzne spôsoby kódovania, ktoré sú

  • default (o) - Implementované v podtriede a vrátiť serializovaný objekt pre o objekt.
  • encode (o) - Rovnako ako metóda json.dumps () vráti reťazec JSON dátovej štruktúry Pythonu.
  • iterencode (o) - predstavuje reťazec jeden po druhom a kóduje objekt o.

Pomocou metódy encode () triedy JSONEncoder môžeme tiež kódovať akýkoľvek 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ýkon:

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

Prehľad triedy desonializácie JSON JSONDecoder

Trieda JSONDecoder sa používa na deserializáciu ľubovoľného objektu Pythonu pri vykonávaní dekódovania. Obsahuje tri rôzne spôsoby dekódovania, ktoré sú

  • default (o) - Implementované v podtriede a vrátiť deserializovaný objekt o objekt.
  • decode (o) - Rovnako ako metóda json.loads () vráti dátovú štruktúru Pythonu reťazca alebo údajov JSON.
  • raw_decode (o) - predstavuje jeden po druhom slovník Pythonu a dekóduje objekt o.

Pomocou metódy decode () triedy JSONDecoder môžeme dekódovať aj reťazec 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ýkon:

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

Dekódovanie údajov JSON z adresy URL: príklad z reálneho života

Z vybranej adresy URL (https://feeds.citibikenyc.com/stations/stations.json) načítame údaje CityBike NYC (systém zdieľania bicyklov) a prevedieme ich do slovníka.

Príklad,

POZNÁMKA: - Uistite sa, že knižnica požiadaviek je už nainštalovaná vo vašom Pythone. Ak nie, otvorte Terminal alebo CMD a zadajte

  • (Pre Python 3 alebo novší) požiadavky na inštaláciu 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ýkon:

{'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ýnimky týkajúce sa knižnice JSON v Pythone:

  • Trieda json.JSONDecoderError spracuje výnimku súvisiacu s operáciou dekódovania. a je to podtrieda ValueError.
  • Výnimka - json.JSONDecoderError (msg, doc)
  • Parametre výnimky sú,
    • msg - Neformátovaná chybová správa
    • doc - analyzované dokumenty JSON
    • pos - spustenie indexu dokumentu, keď zlyhá
    • lineno - riadok bez relácií zodpovedá poz
    • dvojbodka - stĺpec č. nezodpovedá poz

Prí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 Pythone

Formát výmeny údajov JSON (RFC - žiadosť o komentáre) neumožňuje hodnotu nekonečného alebo nanového rozsahu, ale v knižnici Python-JSON nie je žiadne obmedzenie vykonávať operáciu súvisiacu s hodnotou nekonečného a nanového množstva. Ak JSON získa dátový typ INFINITE a Nan, prevedie sa ho do doslovného tvaru.

Prí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ýkon:

InfinityNaNinf

Opakovaný kľúč v reťazci JSON

RFC určuje, že názov kľúča by mal byť v objekte JSON jedinečný, ale nie je to povinné. Knižnica JSON v Pythone nevyvoláva výnimku opakovaných objektov v JSON. Ignoruje všetky opakované páry kľúč - hodnota a berie do úvahy iba posledný pár kľúč - hodnota.

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

Výkon:

{'a': 3}

CLI (Command Line Interface) s JSON v Pythone

json.tool poskytuje rozhranie príkazového riadku na overenie syntaxe peknej tlače JSON. Pozrime sa na príklad CLI

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

Výkon:

{"name": " Kings Authur "}

Výhody JSON v Pythone

  • Ľahký presun späť medzi kontajnerom a hodnotou (JSON pre Python a Python pre JSON)
  • Ľudsky čitateľný (pekná tlač) objekt JSON
  • Široko používaný pri spracovaní údajov.
  • V jednom súbore nemá rovnakú štruktúru údajov.

Obmedzenie implementácie JSON v Pythone

  • V deserializátore rozsahu JSON a predikcii čísla
  • Maximálna dĺžka reťazca JSON a polia JSON a úrovne vnorenia objektu.

Cheat Code

json.dumps (person_data)

Vytvorte objekt JSON

json.dump (person_data, file_write)

Vytvorte súbor JSON pomocou File I / O v Pythone

compact_obj = json.dumps (data, separators = (',', ':'))

Kompaktný objekt JSON odstránením znaku medzery z objektu JSON pomocou oddeľovača

formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':'))

Formátovanie kódu JSON pomocou odsadenia

triedený_reťazec = json.dumps (x, odsadenie = 4, radiace_klíče = pravda)

Triedenie kľúča objektu JSON podľa abecedného poradia

complex_obj = json.dumps (4 + 5j, predvolené = komplexný_kód)

Komplexné kódovanie objektov Python v JSON

JSONEncoder (). Encode (colour_dict)

Použitie triedy JSONEncoder na serializáciu

json.loads (dátový_reťazec)

Dekódovanie reťazca JSON v slovníku Python pomocou funkcie json.loads ()

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

Dekódovanie zložitého objektu JSON do Pythonu

JSONDecoder (). Decode (colour_string)

Použitie dekódovania JSON na Python s deserializáciou