Apa itu JSON?
JSON adalah format standar untuk pertukaran data, yang terinspirasi oleh JavaScript. Umumnya JSON dalam format string atau teks. JSON adalah singkatan dari J ava S cript O bject N otation .
Sintaks JSON: JSON ditulis sebagai pasangan kunci dan nilai.
{"Key": "Value","Key": "Value",}
JSON sangat mirip dengan kamus Python. Python mendukung JSON, dan memiliki pustaka bawaan sebagai JSON.
Perpustakaan JSON dengan Python
Modul eksternal ' marshal ' dan ' pickle' dari Python mempertahankan versi pustaka JSON . Untuk melakukan operasi terkait JSON seperti encoding dan decoding dengan Python, Anda perlu mengimpor pustaka JSON terlebih dahulu dan untuk itu di file .py Anda ,
import json
Metode berikut tersedia dalam modul JSON
metode | Deskripsi |
---|---|
kesedihan() | encoding ke objek JSON |
membuang() | penulisan string yang disandikan pada file |
beban () | Dekode string JSON |
beban() | Dekode saat file JSON dibaca |
Python ke JSON (Enkode)
Pustaka JSON Python melakukan terjemahan objek Python berikut ke dalam objek JSON secara default
Python | JSON |
dikt | Obyek |
daftar | Himpunan |
unicode | Tali |
nomor - int, panjang | nomor - int |
mengapung | nomor - nyata |
Benar | Benar |
Salah | Salah |
Tidak ada | Batal |
Mengonversi data Python ke JSON disebut operasi Encoding. Pengkodean dilakukan dengan bantuan metode perpustakaan JSON - dumps ()
dumps () metode mengonversi objek kamus dari python ke dalam format data string JSON.
Sekarang mari kita melakukan contoh pengkodean pertama kita dengan Python.
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)
Keluaran:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Mari buat file JSON dari kamus menggunakan fungsi dump () yang sama
# 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)
Keluaran:
Tidak ada yang bisa ditampilkan
… Dalam sistem Anda json_file.json dibuat, Anda dapat memeriksa file itu.JSON ke Python (Decoding)
Dekode string JSON dilakukan dengan bantuan metode bawaan load () & load () dari perpustakaan JSON dengan Python. Berikut tabel terjemahan menunjukkan contoh objek JSON ke objek Python yang berguna untuk melakukan decoding dalam string JSON Python.
JSON | Python |
Obyek | dikt |
Himpunan | daftar |
Tali | unicode |
nomor - int | nomor - int, panjang |
nomor - nyata | mengapung |
Benar | Benar |
Salah | Salah |
Batal | Tidak ada |
Mari kita lihat contoh dasar decoding dengan Python dengan bantuan fungsi 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'))
Keluaran:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Mendekode File JSON atau Mengurai file JSON dengan Python
CATATAN: Decoding file JSON adalah operasi terkait Input / Output (I / O) File. File JSON harus ada di sistem Anda di lokasi yang ditentukan yang Anda sebutkan dalam program Anda.
Contoh,
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)
Di sini data adalah objek kamus Python.
Keluaran:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Pengkodean Ringkas dengan Python
Saat Anda perlu mengurangi ukuran file JSON, Anda dapat menggunakan encoding ringkas dengan Python.
Contoh,
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)
Keluaran:
'["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 **
Format kode JSON (Cukup cetak)
- Tujuannya adalah untuk menulis kode yang diformat dengan baik untuk pemahaman manusia. Dengan bantuan pencetakan cantik, siapa pun dapat dengan mudah memahami kodenya.
- Contoh,
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)
Keluaran:
{"a" : 4,"b" : 5}
Untuk lebih memahami ini, ubah indentasi ke 40 dan amati output-
Memesan kode JSON:
Atribut sort_keys dalam argumen fungsi dumps () akan mengurutkan kunci dalam JSON dalam urutan menaik. Argumen sort_keys adalah atribut Boolean. Ketika itu penyortiran yang benar diperbolehkan sebaliknya tidak
Contoh,
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)
Keluaran:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Karena Anda dapat mengamati usia kunci, mobil, anak-anak, dll diatur dalam urutan menaik.
Pengkodean Objek Kompleks dari Python
Objek kompleks memiliki dua bagian yang berbeda
- Bagian nyata
- Bagian imajiner
Contoh: 3 + 2i
Sebelum melakukan encoding objek yang kompleks, Anda perlu memeriksa apakah variabel itu kompleks atau tidak. Anda perlu membuat fungsi yang memeriksa nilai yang disimpan dalam variabel dengan menggunakan metode instance.
Mari kita buat fungsi spesifik untuk objek pemeriksaan yang kompleks atau memenuhi syarat untuk pengkodean.
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)
Keluaran:
'[4.0, 5.0]'
Dekode objek JSON yang kompleks dengan Python
Untuk mendekode objek kompleks di JSON, gunakan parameter object_hook yang memeriksa apakah string JSON berisi objek kompleks atau tidak. Contoh,
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)
Keluaran:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Tinjauan JSON Serialization class JSONEncoder
Kelas JSONEncoder digunakan untuk serialisasi objek Python apa pun saat melakukan pengkodean. Ini berisi tiga metode pengkodean yang berbeda yaitu
- default (o) - Diimplementasikan dalam subclass dan mengembalikan objek serialize untuk objek o .
- encode (o) - Sama seperti metode json.dumps () mengembalikan string JSON dari struktur data Python.
- iterencode (o) - Mewakili string satu per satu dan menyandikan objek o.
Dengan bantuan metode encode () dari kelas JSONEncoder, kita juga dapat menyandikan objek Python apa pun.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Keluaran:
'{"colour": ["red", "yellow", "green"]}'
Tinjauan JSON kelas Deserialization JSONDecoder
Kelas JSONDecoder digunakan untuk deserialisasi objek Python apa pun saat melakukan decoding. Ini berisi tiga metode decoding yang berbeda yaitu
- default (o) - Diimplementasikan dalam subclass dan mengembalikan objek o objek deserialized .
- decode (o) - Sama seperti metode json.loads () mengembalikan struktur data Python dari string atau data JSON.
- raw_decode (o) - Mewakili kamus Python satu per satu dan mendekode objek o.
Dengan bantuan metode decode () kelas JSONDecoder, kita juga dapat mendekode string 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)
Keluaran:
{'colour': ['red', 'yellow']}
Mendekode data JSON dari URL: Contoh Kehidupan Nyata
Kami akan mengambil data CityBike NYC (Bike Sharing System) dari URL yang ditentukan (https://feeds.citibikenyc.com/stations/stations.json) dan mengubahnya ke dalam format kamus.
Contoh,
CATATAN: - Pastikan perpustakaan permintaan sudah diinstal di Python Anda, Jika tidak, buka Terminal atau CMD dan ketik
- (Untuk Python 3 atau lebih tinggi) permintaan penginstalan 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])
Keluaran:
{'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': ''}
Pengecualian Terkait JSON Library dengan Python:
- Class json.JSONDecoderError menangani pengecualian yang terkait dengan operasi decoding. dan itu adalah subkelas ValueError.
- Pengecualian - json.JSONDecoderError (msg, doc)
- Parameter Pengecualian adalah,
- msg - Pesan kesalahan yang belum diformat
- doc - dokumen JSON diurai
- pos - mulai indeks doc jika gagal
- lineno - baris tidak ada acara sesuai dengan pos
- titik dua - kolom tidak sesuai dengan pos
Contoh,
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")
Bilangan Tak Terbatas dan NaN dengan Python
Format Interchange Data JSON (RFC - Request For Comments) tidak mengizinkan Infinite atau Nan Value tetapi tidak ada batasan dalam Python- JSON Library untuk melakukan operasi terkait Infinite dan Nan Value. Jika JSON mendapatkan tipe data INFINITE dan Nan daripada mengubahnya menjadi literal.
Contoh,
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))
Keluaran:
InfinityNaNinf
Kunci berulang dalam String JSON
RFC menetapkan nama kunci harus unik dalam objek JSON, tetapi tidak wajib. Pustaka Python JSON tidak memunculkan pengecualian objek berulang di JSON. Ini mengabaikan semua pasangan nilai kunci berulang dan hanya mempertimbangkan pasangan nilai kunci terakhir di antara mereka.
- Contoh,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Keluaran:
{'a': 3}
CLI (Command Line Interface) dengan JSON dengan Python
json.tool menyediakan antarmuka baris perintah untuk memvalidasi sintaks pretty-print JSON. Mari kita lihat contoh CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Keluaran:
{"name": " Kings Authur "}
Keuntungan JSON dengan Python
- Mudah untuk berpindah kembali antara container dan value (JSON ke Python dan Python ke JSON)
- Objek JSON (Pretty-print) yang dapat dibaca manusia
- Banyak digunakan dalam penanganan data.
- Tidak memiliki struktur data yang sama dalam satu file.
Batasan implementasi JSON dengan Python
- Dalam deserializer rentang JSON dan prediksi angka
- Panjang maksimum string JSON dan larik JSON serta tingkat bertingkat objek.
Kode curang
json.dumps (person_data) |
Buat Objek JSON |
json.dump (person_data, file_write) |
Buat File JSON menggunakan File I / O Python |
compact_obj = json.dumps (data, pemisah = (',', ':')) |
Memadatkan Objek JSON dengan menghapus karakter spasi dari Objek JSON menggunakan pemisah |
formatted_obj = json.dumps (dic, indent = 4, pemisah = (',', ':')) |
Memformat kode JSON menggunakan Indent |
sort_string = json.dumps (x, indent = 4, sort_keys = True) |
Mengurutkan kunci objek JSON berdasarkan urutan abjad |
complex_obj = json.dumps (4 + 5j, default = kode_kompleks) |
Pengkodean Objek Kompleks Python di JSON |
JSONEncoder (). Encode (colour_dict) |
Penggunaan Kelas JSONEncoder untuk Serialisasi |
json.loads (data_string) |
Mendekode String JSON dalam kamus Python menggunakan fungsi json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex) |
Mendekode objek JSON kompleks ke Python |
JSONDecoder (). Decode (colour_string) |
Penggunaan Decoding JSON ke Python dengan Deserialization |