JSON #
Pengertian #
JSON (JavaScript Object Notation) adalah format pertukaran data yang ringan dan mudah dibaca. Python menyediakan modul json
bawaan yang memungkinkan Anda untuk bekerja dengan data JSON, termasuk parsing JSON dari string atau file dan menghasilkan JSON dari objek Python.
Operasi Dasar #
Berikut adalah operasi dasar yang dapat dilakukan dengan modul json
di Python:
Parsing JSON #
-
Dari String JSON: Menggunakan
json.loads()
import json json_string = '{"name": "Alice", "age": 25, "city": "New York"}' data = json.loads(json_string) print(data) # Output: {'name': 'Alice', 'age': 25, 'city': 'New York'}
-
Dari File JSON: Menggunakan
json.load()
import json with open('data.json', 'r') as file: data = json.load(file) print(data) # Output tergantung pada isi dari data.json
Menghasilkan JSON #
-
Ke String JSON: Menggunakan
json.dumps()
import json data = {'name': 'Alice', 'age': 25, 'city': 'New York'} json_string = json.dumps(data) print(json_string) # Output: {"name": "Alice", "age": 25, "city": "New York"}
-
Ke File JSON: Menggunakan
json.dump()
import json data = {'name': 'Alice', 'age': 25, 'city': 'New York'} with open('data.json', 'w') as file: json.dump(data, file)
Fitur Lanjutan #
indent
dan sort_keys
#
-
indent
: Untuk menghasilkan JSON yang diformat dengan baikimport json data = {'name': 'Alice', 'age': 25, 'city': 'New York'} json_string = json.dumps(data, indent=4) print(json_string) # Output: # { # "name": "Alice", # "age": 25, # "city": "New York" # }
-
sort_keys
: Untuk mengurutkan kunci dalam JSONimport json data = {'name': 'Alice', 'age': 25, 'city': 'New York'} json_string = json.dumps(data, sort_keys=True) print(json_string) # Output: {"age": 25, "city": "New York", "name": "Alice"}
default
#
Untuk objek yang tidak bisa diserialisasi langsung oleh JSON (seperti objek kustom), Anda bisa menggunakan parameter default
:
import json
from datetime import datetime
class Person:
def __init__(self, name, birthdate):
self.name = name
self.birthdate = birthdate
def default_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, Person):
return {"name": obj.name, "birthdate": obj.birthdate.isoformat()}
raise TypeError(f"Type {type(obj)} not serializable")
person = Person("Alice", datetime(1995, 5, 15))
json_string = json.dumps(person, default=default_serializer)
print(json_string)
# Output: {"name": "Alice", "birthdate": "1995-05-15T00:00:00"}
object_hook
#
Anda juga bisa mengubah JSON kembali menjadi objek kustom menggunakan object_hook
:
import json
from datetime import datetime
class Person:
def __init__(self, name, birthdate):
self.name = name
self.birthdate = birthdate
def dict_to_person(d):
if "name" in d and "birthdate" in d:
return Person(d["name"], datetime.fromisoformat(d["birthdate"]))
return d
json_string = '{"name": "Alice", "birthdate": "1995-05-15T00:00:00"}'
person = json.loads(json_string, object_hook=dict_to_person)
print(person.name) # Output: Alice
print(person.birthdate) # Output: 1995-05-15 00:00:00
Validasi JSON #
Untuk memvalidasi teks JSON di Python, Anda dapat menggunakan modul json
. Validasi JSON pada dasarnya melibatkan parsing teks JSON untuk memastikan bahwa formatnya benar. Jika teks JSON tidak valid, modul json
akan menimbulkan pengecualian yang dapat Anda tangani untuk menentukan bahwa teks tersebut tidak valid.
Anda dapat menggunakan fungsi json.loads()
untuk mencoba memuat teks JSON. Jika JSON valid, fungsi ini akan mengembalikan objek Python yang sesuai. Jika tidak, fungsi ini akan menimbulkan pengecualian json.JSONDecodeError
.
Berikut adalah cara untuk memvalidasi teks JSON:
def is_valid_json(json_string):
try:
json.loads(json_string)
return True
except json.JSONDecodeError as e:
print(f"Invalid JSON: {e.msg} at line {e.lineno} column {e.colno}")
return False
# Contoh penggunaan
json_string_valid = '{"name": "Alice", "age": 25, "city": "New York"}'
json_string_invalid = '{"name": "Alice", "age": 25, "city": "New York"'
print(is_valid_json(json_string_valid)) # Output: True
print(is_valid_json(json_string_invalid)) # Output: Invalid JSON: Expecting ',' delimiter at line 1 column 43
# False
Dalam contoh ini, pesan kesalahan yang lebih rinci diberikan, menunjukkan posisi kesalahan dalam teks JSON.
Kesimpulan #
Modul json
di Python menyediakan fungsionalitas yang kuat dan fleksibel untuk bekerja dengan data JSON. Operasi dasar seperti parsing dan menghasilkan JSON bisa dilakukan dengan mudah menggunakan json.loads()
, json.load()
, json.dumps()
, dan json.dump()
. Fitur lanjutan seperti kustomisasi serialisasi dan deserialisasi memungkinkan Anda untuk bekerja dengan tipe data kustom yang tidak didukung secara langsung oleh JSON.