unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
JSON

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 baik

    import 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 JSON

    import 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.

« Mocking
YAML »