Python JSON: Encode(dumps), Decode(memuat) & Baca File JSON

Apa yang dimaksud dengan JSON Python?

JSON in Python adalah format standar yang terinspirasi oleh JavaSkrip untuk pertukaran data dan transfer data sebagai format teks melalui jaringan. Umumnya, JSON dalam format string atau teks. JSON dapat digunakan oleh API dan database, dan JSON merepresentasikan objek sebagai pasangan nama/nilai. JSON merupakan singkatan dari JavaNotasi Objek Skrip.

Python Sintaks JSON:

JSON ditulis sebagai pasangan kunci dan nilai.

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

JSON sangat mirip dengan Python kamus. Python mendukung JSON, dan memiliki perpustakaan bawaan sebagai JSON.

Perpustakaan JSON di Python

'marsekal'Dan'acar' modul eksternal dari Python mempertahankan versi JSON Python perpustakaan. Bekerja dengan JSON di Python untuk melakukan operasi terkait JSON seperti pengkodean dan dekode, Anda perlu terlebih dahulu mengimpor Perpustakaan JSON dan untuk itu di perpustakaan Anda .py file,

import json

Metode berikut tersedia dalam JSON Python modul

metode Description
kesedihan() pengkodean ke objek JSON
membuang() penulisan string yang dikodekan pada file
memuat() Dekode string JSON
memuat() Dekode saat file JSON dibaca

Python ke JSON (Pengkodean)

JSON Perpustakaan dari Python melakukan penerjemahan berikut Python objek menjadi objek JSON secara default

Python JSON
dict obyek
daftar susunan
unicode String
nomor – int, panjang nomor – int
mengapung nomor – nyata
Benar Benar
Salah Salah
None Null

Konversi Python data ke JSON disebut operasi Encoding. Encoding dilakukan dengan bantuan metode library JSON – kesedihan()

JSON dump() masuk Python

json.dumps() in Python adalah metode yang mengubah objek kamus Python ke dalam format data string JSON. Berguna jika objek harus berada dalam format string untuk operasi seperti penguraian, pencetakan, dsb.

Sekarang mari kita lakukan contoh pengkodean json.dumps pertama kita dengan 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)

Keluaran:

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

Mari kita lihat contohnya Python tulis JSON ke file untuk membuat file JSON kamus menggunakan fungsi yang sama membuang()

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

Keluaran:

Tidak ada yang ditampilkan…Di sistem Anda, json_file.json telah dibuat. Anda dapat memeriksa file itu seperti yang ditunjukkan di bawah ini, tulis JSON ke file Python contoh.

Python Contoh Enkode JSON

JSON ke Python (penguraian kode)

Decoding string JSON dilakukan dengan bantuan metode bawaan json.memuat() & json.beban() perpustakaan JSON di Python. Di sini tabel terjemahan menunjukkan contoh objek JSON Python objek yang berguna untuk melakukan decoding Python dari string JSON.

JSON Python
obyek dict
susunan daftar
String unicode
nomor – int nomor – int, panjang
nomor – nyata mengapung
Benar Benar
Salah Salah
Null None

Mari kita lihat parsing dasar JSON Python contoh decoding dengan bantuan json.loads fungsi,

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

Keluaran:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Python Contoh Dekode JSON

Mendekode File JSON atau Mengurai file JSON di Python

Sekarang, kita akan belajar cara membaca file JSON Python dengan Python parsing contoh JSON:

CATATAN: Decoding file JSON adalah operasi terkait File Input / Output (I/O). File JSON harus ada di sistem Anda di lokasi tertentu yang Anda sebutkan dalam program Anda.

Python membaca file JSON Contoh:

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)

Berikut datanya adalah objek kamus Python seperti yang ditunjukkan pada file JSON baca di atas Python contoh.

Keluaran:

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

Mengurai file JSON di Python

Pengkodean Ringkas di Python

Saat Anda perlu mengurangi ukuran file JSON, Anda dapat menggunakan pengkodean ringkas Python.

Contoh,

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)

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 (Cetak cantik)

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

Keluaran:

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

Contoh format kode JSON

Untuk lebih memahami hal ini, ubah indentasi menjadi 40 dan amati keluaran-

Contoh format kode JSON

Memesan kode JSON:

sort_keys atribut dalam Python Argumen fungsi dumps akan mengurutkan kunci dalam JSON dalam urutan menaik. Argumen sort_keys adalah atribut Boolean. Jika nilainya benar, pengurutan diperbolehkan, jika tidak, tidak diperbolehkan. Mari kita pahami dengan Python contoh pengurutan string ke JSON.

Contoh,

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)

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

Seperti yang Anda amati, usia kunci, mobil, anak-anak, dll disusun dalam urutan menaik.

Pengkodean Objek Kompleks Python

Objek Kompleks memiliki dua bagian yang berbeda yaitu

  1. Bagian nyata
  2. Bagian imajiner

Pengkodean Objek Kompleks Python

Contoh: 3 +2i

Sebelum melakukan pengodean objek yang kompleks, Anda perlu memeriksa apakah variabel tersebut kompleks atau tidak. Anda perlu membuat fungsi yang memeriksa nilai yang disimpan dalam variabel dengan menggunakan metode instan.

Mari membuat fungsi spesifik untuk memeriksa apakah objek tersebut rumit atau memenuhi syarat untuk dikodekan.

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)

Keluaran:

'[4.0, 5.0]'

Dekode objek JSON kompleks di Python

Untuk mendekode objek kompleks dalam JSON, gunakan parameter object_hook yang memeriksa apakah string JSON berisi objek kompleks atau tidak. Mari kita pahami dengan string ke JSON Python Contoh,

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)

Keluaran:

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

Ikhtisar kelas Serialisasi JSON JSONEncoder

Kelas JSONEncoder digunakan untuk serialisasi apa pun Python objek saat melakukan pengkodean. Ini berisi tiga metode pengkodean yang berbeda yaitu

  • bawaan(o) – Diimplementasikan di subkelas dan mengembalikan objek serialisasi o obyek.
  • menyandikan(o) – Sama seperti dump JSON Python metode mengembalikan string JSON Python struktur data.
  • kode ulang(o) – Mewakili string satu per satu dan menyandikan objek o.

Dengan bantuan metode encode() dari kelas JSONEncoder, kita juga dapat mengkodekan apa pun Python objek seperti gambar di bawah ini Python Contoh pembuat enkode 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)

Keluaran:

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

Ikhtisar kelas Deserialisasi JSON JSONDecoder

Kelas JSONDecoder digunakan untuk deserialisasi apa pun Python objek saat melakukan decoding. Ini berisi tiga metode decoding yang berbeda

  • bawaan(o) – Diimplementasikan di subkelas dan mengembalikan objek yang dideserialisasi o obyek.
  • memecahkan kode (o) – Sama seperti pengembalian metode json.loads() Python struktur data string atau data JSON.
  • dekode_mentah(o) - Mewakili Python kamus satu per satu dan memecahkan kode objek o.

Dengan bantuan metode decode() kelas JSONDecoder, kita juga dapat mendekode string JSON seperti yang ditunjukkan di bawah ini Python Contoh dekoder 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)

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://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) dan ubah ke format kamus.

Python memuat JSON dari file Contoh:

CATATAN: - Pastikan perpustakaan permintaan sudah terinstal di Anda Python, Jika tidak maka buka Terminal atau CMD dan ketik

  • (Untuk Python 3 atau lebih tinggi) permintaan pemasangan 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]) 

Keluaran:

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

Pengecualian Terkait dengan Perpustakaan JSON di Python:

  • Kelas json.JSONDecoderError menangani pengecualian yang terkait dengan operasi decoding. dan ini adalah subkelas dari NilaiKesalahan.
  • Pengecualian - json.JSONDecoderError(pesan, dokumen)
  • Parameter Pengecualian adalah,
    • pesan – Pesan Kesalahan Belum Diformat
    • doc – Dokumen JSON diurai
    • pos – memulai indeks dokumen ketika gagal
    • lineno – baris no show sesuai dengan pos
    • titik dua – kolom tidak sesuai dengan pos

Python memuat JSON dari file Contoh:

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

Perpustakaan JSON di Python

Tak Terbatas dan NaN Numbers in Python

Format Pertukaran Data JSON (RFC – Permintaan Komentar) tidak mengizinkan Nilai Tak Terbatas atau Nan tetapi tidak ada batasan dalam Python- Pustaka JSON untuk melakukan operasi terkait Nilai Tak Terbatas dan Nan. Jika JSON memperoleh tipe data Tak Terbatas dan Nan, maka JSON akan mengubahnya menjadi literal.

Contoh,

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

Keluaran:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Kunci berulang dalam String JSON

RFC menentukan nama kunci harus unik dalam objek JSON, tapi itu tidak wajib. Python Pustaka JSON tidak memunculkan pengecualian objek berulang di JSON. Ini mengabaikan semua pasangan nilai kunci yang berulang dan hanya mempertimbangkan pasangan nilai kunci terakhir di antara pasangan tersebut.

  • Contoh,
import json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Keluaran:

{'a': 3}

CLI (Antarmuka Baris Perintah) dengan JSON di dalamnya Python

json.tool menyediakan antarmuka baris perintah untuk memvalidasi sintaksis JSON yang dicetak cantik. Mari kita lihat contoh CLI

Antarmuka Baris Perintah dengan JSON

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

Keluaran:

{
    "name": " Kings Authur "
}

Keuntungan JSON di Python

  • Mudah untuk berpindah kembali antara wadah dan nilai (JSON ke Python dan Python ke JSON)
  • Objek JSON yang dapat dibaca manusia (Cetak cantik)
  • Banyak digunakan dalam penanganan data.
  • Tidak memiliki struktur data yang sama dalam satu file.

Batasan Implementasi JSON di Python

  • Dalam deserializer rentang JSON dan prediksi angka
  • Panjang maksimum string JSON dan array JSON serta tingkat objek bersarang.

Python Lembar Cheat JSON

Python Fungsi JSON Description
json.dumps(data_orang) Buat Objek JSON
json.dump(data_orang, file_tulis) Buat File JSON menggunakan File I/O Python
compact_obj = json.dumps(data, pemisah=(',',':')) Ringkas Objek JSON dengan menghapus karakter spasi dari Objek JSON menggunakan pemisah
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) Memformat kode JSON menggunakan Indent
diurutkan_string = json.dumps(x, indent=4, sort_keys=True) Mengurutkan kunci objek JSON berdasarkan urutan abjad
kompleks_obj = json.dumps(4 + 5j, default=encode_kompleks) Python Pengkodean Objek Kompleks dalam JSON
JSONEncoder().encode(warna_dict) Penggunaan Kelas JSONEncoder untuk Serialisasi
json.beban(data_string) Mendekode String JSON di Python kamus menggunakan fungsi json.loads()
json.loads('{“__complex__”: benar, “nyata”: 4, “img”: 5}', kait_objek = kompleks) Decoding objek JSON kompleks menjadi Python
JSONDecoder().decode(warna_string) Penggunaan Decoding JSON ke Python dengan Deserialisasi