2.28. JSON

JSON (JavaScript Object Notation) adalah format teks yang ringkas dan mudah dibaca manusia untuk data terstruktur. Format ini mendefinisikan enam tipe -- string, number, boolean, null, array, dan object -- yang masing-masing langsung memetakan ke nilai Python, sehingga konversi antara Python dan JSON hanya membutuhkan satu panggilan fungsi di kedua arah.

JSON adalah lingua franca dari file konfigurasi dan API web. Gunakan ketika Anda perlu menyimpan sekumpulan pengaturan kecil ke disk dalam bentuk yang juga dapat Anda baca dengan mata, atau untuk bertukar data terstruktur dengan program lain.

Dua fungsi mencakup sebagian besar kebutuhan:

  • json.dumps() -- dump string: mengubah nilai Python menjadi string JSON.

  • json.loads() -- load string: mem-parse string JSON kembali ke Python.

Pasangan json.dump / json.load (tanpa s) melakukan pekerjaan yang sama tetapi langsung mengambil objek file.

2.28.1. Encoding (dumps)

import json

config = {
    "name":  "OpenMV",
    "width": 320,
    "tags":  ["red", "round"],
}

text = json.dumps(config)
print(text)

Output:

{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}

Pemetaannya adalah:

Apa pun di luar set tersebut (kelas kustom, buffer bytes, set) melempar TypeError. Konversi nilainya terlebih dahulu.

Catatan

Fungsi json.dumps() CPython menerima argumen indent untuk output yang dicetak rapi; milik MicroPython tidak. Satu-satunya kenop pemformatan adalah separators, yang mengontrol spasi inline -- berikan (',', ':') untuk bentuk paling ringkas. Output multi-baris dengan indentasi harus diproduksi secara manual jika diperlukan.

2.28.2. Decoding (loads)

text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])

Output:

OpenMV 320

Objek JSON menjadi dict, array menjadi list, dan sisanya memetakan kembali ke ekuivalen Python-nya. JSON yang buruk melempar ValueError.

2.28.3. Membaca dan menulis file

Pasangan berbasis file berfungsi baik dengan with:

import json

with open("config.json") as f:
    config = json.load(f)

config["width"] = 640

with open("config.json", "w") as f:
    json.dump(config, f)

Perlakukan file JSON sebagai catatan lengkap -- baca, modifikasi nilai Python, tulis kembali. Mencoba mengedit JSON di tempat dalam sebuah file biasanya menciptakan lebih banyak bug daripada yang dihemat.