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.

Python Przykład kodowania JSON

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

Python Przykład dekodowania JSON

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

Analizowanie pliku JSON Python

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
}

Formatuj kod JSON Przykład

Aby lepiej to zrozumieć, zmień wcięcie na 40 i obserwuj wynik:

Formatuj kod JSON Przykład

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.

  1. Prawdziwa część
  2. Część urojona

Złożone kodowanie obiektów Python

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

Biblioteka JSON w Python

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

Interfejs wiersza poleceń z JSON

$ 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ą

Podsumuj ten post następująco: