Python JSON: Koduj (zrzuca), dekoduj (ładuje) i czytaj plik JSON
W czym jest JSON Python?
JSON in Python to standardowy format inspirowany JavaSkrypt do wymiany danych i przesyłania danych w formacie tekstowym przez sieć. Zasadniczo JSON jest w formacie ciągu lub tekstu. Może być używany przez API i bazy danych i reprezentuje obiekty jako pary nazwa/wartość. JSON oznacza JavaNotacja obiektu skryptu.
Python Składnia JSON:
JSON jest zapisywany jako para klucz-wartość.
{
"Key": "Value",
"Key": "Value",
}
JSON jest bardzo podobny do Python słownik. Python obsługuje JSON i ma wbudowaną bibliotekę jako JSON.
Biblioteka JSON w Python
"marszałek' i 'marynata' moduły zewnętrzne Python utrzymać wersję JSON Python biblioteka. Praca z JSON w Python aby wykonać operacje związane z JSON, takie jak kodowanie i dekodowanie, musisz najpierw importować JSON i do tego w twoim .py file,
import json
W JSON dostępne są następujące metody Python moduł
| Metoda wykonania | OPIS |
|---|---|
| depresja() | kodowanie do obiektów JSON |
| wysypisko() | zakodowany ciąg znaków zapisywany w pliku |
| masa() | Dekoduj ciąg JSON |
| Załaduj() | Dekoduj podczas odczytu pliku JSON |
Python do JSON (kodowanie)
JSON Biblioteka Python wykonuje następujące tłumaczenie Python domyślnie do obiektów JSON
| Python | JSON |
|---|---|
| DICT | przedmiot |
| podstęp | Szyk |
| unicode | sznur |
| liczba – int, długa | liczba – wew |
| unosić się | liczba – prawdziwa |
| Prawdziwy | Prawdziwy |
| Fałszywy | Fałszywy |
| żaden | Null |
Konwersja Python danych do JSON nazywa się operacją kodowania. Kodowanie odbywa się za pomocą metody biblioteki JSON – depresja()
JSON zrzuca() w Python
json.zrzuty() in Python to metoda konwertująca obiekty słownika Python do formatu danych JSON string. Jest to przydatne, gdy obiekty muszą być w formacie string do operacji takich jak parsowanie, drukowanie itp.
Teraz wykonajmy nasz pierwszy przykład kodowania json.dumps 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)
Wyjście:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Zobaczmy przykład Python napisz JSON do pliku, aby utworzyć plik JSON słownika przy użyciu tej samej funkcji wysypisko()
# 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)
Wyjście:
Nic do pokazania… W Twoim systemie tworzony jest plik json_file.json. Możesz sprawdzić ten plik, jak pokazano poniżej, zapisując JSON do pliku Python przykład.
JSON do Python (Rozszyfrowanie)
Dekodowanie ciągu JSON odbywa się za pomocą wbudowanej metody json.ładuje() & json.load() biblioteki JSON w Python. Tutaj tabela tłumaczeń pokazuje przykład obiektów JSON do Python obiekty które są pomocne w dekodowaniu Python ciągu JSON.
| JSON | Python |
|---|---|
| przedmiot | DICT |
| Szyk | podstęp |
| sznur | unicode |
| liczba – wew | liczba – int, długa |
| liczba – prawdziwa | unosić się |
| Prawdziwy | Prawdziwy |
| Fałszywy | Fałszywy |
| Null | żaden |
Zobaczmy podstawową analizę JSON Python przykład dekodowania za pomocą json.loads funkcjonować,
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'))
Wyjście:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}
Dekodowanie pliku JSON lub analizowanie pliku JSON Python
Teraz nauczymy się czytać plik JSON Python w Python przeanalizuj przykład JSON:
UWAGA: Dekodowanie pliku JSON to operacja związana z wejściem/wyjściem pliku (I/O). Plik JSON musi znajdować się w systemie w określonej lokalizacji, którą podałeś w swoim programie.
Python przeczytaj plik JSON Przykład:
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)
Tutaj dane jest obiektem słownikowym Python jak pokazano w powyższym pliku JSON Python przykład.
Wyjście:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktowe kodowanie w Python
Jeśli chcesz zmniejszyć rozmiar pliku JSON, możesz użyć kodowania kompaktowego Python.
Przykład,
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)
Wyjście:
'["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 **
Sformatuj kod JSON (ładny druk)
- Celem jest napisanie dobrze sformatowanego kodu, który będzie zrozumiały dla człowieka. Dzięki ładnemu drukowi każdy może łatwo zrozumieć kod.
Przykład:
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)
Wyjście:
{
"a" : 4,
"b" : 5
}
Aby lepiej to zrozumieć, zmień wcięcie na 40 i obserwuj wynik:
Zamawianie kodu JSON:
sort_keys atrybut w Python Argument funkcji dumps posortuje klucz w JSON w kolejności rosnącej. Argument sort_keys jest atrybutem logicznym. Gdy jest to prawda, sortowanie jest dozwolone, w przeciwnym razie nie. Zrozumiemy to za pomocą Python string do przykładu sortowania JSON.
Przykład,
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)
Wyjście:
{
"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 można zauważyć, wiek kluczy, samochody, dzieci itp. są ułożone w kolejności rosnącej.
Złożone kodowanie obiektów Python
Obiekt złożony składa się z dwóch różnych części, tj.
- Prawdziwa część
- Część urojona
Przykład: 3 +2i
Przed wykonaniem kodowania złożonego obiektu, musisz sprawdzić, czy zmienna jest złożona, czy nie. Musisz utworzyć funkcję, która sprawdza wartość przechowywaną w zmiennej, używając metody instancji.
Utwórzmy specjalną funkcję sprawdzającą, czy obiekt jest złożony lub kwalifikuje się do zakodowania.
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)
Wyjście:
'[4.0, 5.0]'
Złożone dekodowanie obiektów JSON w Python
Aby zdekodować złożony obiekt w JSON, użyj parametru object_hook, który sprawdza, czy ciąg JSON zawiera złożony obiekt. Zrozumiemy to za pomocą ciągu do JSON Python Przykład,
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)
Wyjście:
Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}
Omówienie klasy serializacji JSON JSONEncoder
Klasa JSONEncoder służy do serializacji dowolnego Python obiekt podczas kodowania. Zawiera trzy różne metody kodowania, które są
- domyślnie(o) – Zaimplementowano w podklasie i zwraca obiekt serializacji dla o obiekt.
- kodować (o) – To samo co zrzuty JSON Python metoda zwraca ciąg JSON Python struktura danych.
- iterencode(o) – Reprezentuj ciąg znaków jeden po drugim i koduj obiekt o.
Za pomocą metody encode() klasy JSONEncoder możemy także zakodować dowolny plik Python obiekt, jak pokazano poniżej Python Przykład kodera 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)
Wyjście:
'{"colour": ["red", "yellow", "green"]}'
Omówienie klasy deserializacji JSON JSONDecoder
Klasa JSONDecoder służy do deserializacji dowolnego obiektu Python obiekt podczas dekodowania. Zawiera trzy różne metody dekodowania, które są
- domyślnie(o) – Zaimplementowano w podklasie i zwrócono deserializowany obiekt o obiekt.
- dekodować(o) – To samo co powrót metodą json.loads(). Python struktura danych ciągu JSON lub danych.
- raw_decode(o) – Reprezentuj Python słownik jeden po drugim i dekoduj obiekt o.
Za pomocą metody decode() klasy JSONDecoder możemy również zdekodować ciąg JSON, jak pokazano poniżej Python Przykład dekodera 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)
Wyjście:
{'colour': ['red', 'yellow']}
Dekodowanie danych JSON z adresu URL: przykład z życia wzięty
Pobierzemy dane CityBike NYC (system udostępniania rowerów) z podanego adresu URL (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) i skonwertuj do formatu słownikowego.
Python załaduj JSON z pliku Przykład:
UWAGA: - Upewnij się, że biblioteka żądań jest już zainstalowana w twoim Python, Jeśli nie, otwórz Terminal lub CMD i wpisz
- (Dla Python 3 lub nowszy) żądania instalacji 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])
Wyjście:
<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': ''
}
Wyjątki związane z biblioteką JSON w Python:
- Klasa Błąd json.JSONDekodera obsługuje wyjątek związany z operacją dekodowania. i jest podklasą Błąd wartości.
- Wyjątek - json.JSONDecoderError(msg, doc)
- Parametry wyjątku to:
- msg – Niesformatowany komunikat o błędzie
- doc – przeanalizowano dokumenty JSON
- pos – uruchomienie indeksu dokumentu w przypadku niepowodzenia
- lineno – linia nr odpowiada poz
- dwukropek – kolumna nr odpowiada poz
Python załaduj JSON z pliku Przykład:
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")
Nieskończony i NaN Numbers in Python
Format wymiany danych JSON (RFC – żądanie komentarzy) nie dopuszcza wartości nieskończonych ani wartości Nan, ale nie ma żadnych ograniczeń Python- Biblioteka JSON do wykonywania operacji związanych z wartościami Infinite i Nan. Jeśli JSON otrzymuje typ danych INFINITE i Nan, to jest on konwertowany na literał.
Przykład,
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))
Wyjście:
Infinity <class 'str'> NaN inf <class 'float'>
Powtórzony klucz w ciągu JSON
RFC określa, że nazwa klucza powinna być unikalna w obiekcie JSON, ale nie jest to obowiązkowe. Python Biblioteka JSON nie zgłasza wyjątku dla powtarzających się obiektów w JSON. Ignoruje wszystkie powtarzające się pary klucz-wartość i uwzględnia tylko ostatnią parę klucz-wartość spośród nich.
- Przykład,
import json
repeat_pair = '{"a": 1, "a": 2, "a": 3}'
json.loads(repeat_pair)
Wyjście:
{'a': 3}
CLI (interfejs wiersza poleceń) z wejściem JSON Python
json.tool udostępnia interfejs wiersza poleceń do sprawdzania poprawności składni JSON Pretty-Print. Zobaczmy przykład CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Wyjście:
{
"name": " Kings Authur "
}
Zalety JSON w Python
- Łatwe przechodzenie między kontenerem a wartością (JSON do Python oraz Python do JSON-a)
- Obiekt JSON czytelny dla człowieka (Pretty-print)
- Szeroko stosowany w przetwarzaniu danych.
- Nie ma tej samej struktury danych w pojedynczym pliku.
Ograniczenia implementacyjne JSON w Python
- W deserializatorze zakresu JSON i przewidywaniu liczby
- Maksymalna długość ciągu JSON i tablic JSON oraz poziomów zagnieżdżenia obiektu.
Python Ściągawka JSON
| Python Funkcja JSON | OPIS |
|---|---|
| json.dumps(dane_osoby) | Utwórz obiekt JSON |
| json.dump(dane_osoby, zapis_pliku) | Utwórz plik JSON przy użyciu operacji wejścia/wyjścia pliku Python |
| Compact_obj = json.dumps(dane, separatory=(',',':')) | Kompaktuj obiekt JSON, usuwając znak spacji z obiektu JSON za pomocą separatora |
| sformatowany_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Formatowanie kodu JSON przy użyciu wcięcia |
| sorted_string = json.dumps(x, indent=4, sort_keys=True) | Sortowanie klucza obiektu JSON według kolejności alfabetycznej |
| complex_obj = json.dumps(4 + 5j, domyślnie=complex_encode) | Python Złożone kodowanie obiektów w JSON |
| JSONEncoder().encode(color_dict) | Użycie klasy JSONEncoder do serializacji |
| json.loads(string_danych) | Dekodowanie ciągu JSON w Python słownik przy użyciu funkcji json.loads(). |
| json.loads('{“__complex__”: prawda, “rzeczywisty”: 4, “img”: 5}', obiekt_hook = is_complex) | Dekodowanie złożonego obiektu JSON do Python |
| JSONDecoder().decode(color_string) | Użycie dekodowania JSON do Python z deserializacją |








