# Mengolah Data JSON Menggunakan Python

# Sekilas JSON

JSON adalah singkatan dari *JavaScript Object Notation*. JSON adalah format data yang populer untuk pertukaran data antar aplikasi. JSON adalah format data yang ringan dan mudah dibaca oleh manusia, dan dapat dengan mudah dikonversi ke format data lain seperti XML atau CSV.

**Keuntungan menggunakan JSON sebagai media penyimpanan**

Ada beberapa keuntungan menggunakan JSON sebagai media penyimpanan, antara lain:

* Ringkas dan mudah dibaca
    
* Terstruktur
    
* Lebih mudah diakses oleh aplikasi
    
* Dapat dikonversi ke format data lain
    

**Contoh penggunaan JSON sebagai media penyimpanan**

JSON dapat digunakan untuk menyimpan berbagai jenis data, seperti:

* Data pengguna
    
* Data barang
    
* Data transaksi
    
* Data konfigurasi
    
* Data log
    

**Kelemahan menggunakan JSON sebagai media penyimpanan**

Ada beberapa kelemahan menggunakan JSON sebagai media penyimpanan, antara lain:

* Tidak dapat menyimpan data biner
    
* Tidak dapat menyimpan data yang sangat kompleks
    

Secara keseluruhan, JSON adalah format data yang baik untuk digunakan sebagai media penyimpanan. JSON adalah format data yang ringkas, mudah dibaca, dan terstruktur. JSON juga lebih mudah diakses oleh aplikasi dan dapat dikonversi ke format data lain.

# Contoh Data JSON

Berikut adalah contoh data format JSON yang sederhana:

```json
{
  "nama": "Fulan Fulanah",
  "usia": 20,
  "alamat": "Jl. Jendral Sudirman No. 1, Bandung"
}
```

Data JSON ini menggambarkan informasi pribadi seseorang. Data ini terdiri dari tiga properti:

* **nama** adalah properti string yang menyimpan nama seseorang.
    
* **usia** adalah properti integer yang menyimpan usia seseorang.
    
* **alamat** adalah properti string yang menyimpan alamat seseorang.
    

Berikut adalah contoh lain dari data format JSON yang sederhana dan mudah dipahami:

```json
[
  {
    "kode": 1,
    "nama": "Pensil",
    "harga": 2000
  },
  {
    "kode": 2,
    "nama": "Penghapus",
    "harga": 1000
  },
  {
    "kode": 3,
    "nama": "Penggaris",
    "harga": 1500
  },
  {
    "kode": 4,
    "nama": "Ballpoint",
    "harga": 5000
  }
]
```

Data JSON ini menggambarkan daftar barang. Data ini terdiri dari *array* (larik) yang berisi empat objek JSON. Setiap objek JSON memiliki tiga properti:

* **kode** adalah properti integer yang menyimpan kode barang.
    
* **nama** adalah properti string yang menyimpan nama barang.
    
* **harga** adalah properti integer yang menyimpan harga barang.
    

Untuk selanjutnya kita anggap data ini disimpan dalam sebuah fail bernama **<mark>barang.json</mark>**.

Berikut contoh data JSON terkait informasi pribadi yang sedikit lebih rumit.

```json
[
  {
    "nama": "Fulan Fulanah",
    "usia": 30,
    "alamat": {
      "jalan": "Jl. Jendral Sudirman No. 1",
      "kota": "Bandung",
      "provinsi": "Jawa Barat"
    },
    "hobi": ["Membaca", "Menulis", "Bermain Gitar"]
  },
  {
    "nama": "Asep",
    "usia": 25,
    "alamat": {
      "jalan": "Jl. Medan Merdeka Barat No. 1",
      "kota": "Jakarta",
      "provinsi": "DKI Jakarta"
    },
    "hobi": ["Olahraga", "Memasak", "Wisata"]
  }
]
```

Dalam contoh di atas, saya menyimpan data untuk dua orang dalam bentuk larik (*array*). Setiap objek dalam *array* mewakili satu orang dengan properti "nama", "usia", "alamat", dan "hobi" yang sesuai.

Dalam struktur JSON yang diberikan, "jalan", "kota", dan "provinsi" adalah bagian dari properti "alamat". Item-item ini merupakan kunci atau nama properti yang mewakili informasi tentang alamat seseorang.

Untuk selanjutnya kita anggap data ini disimpan dalam sebuah fail bernama **<mark>orang.json</mark>**.

Secara umum, data JSON ini mudah dipahami karena strukturnya sederhana dan mudah dibaca. Data JSON ini juga mudah diakses oleh aplikasi karena menggunakan format data yang standar.

# Pemrograman: Mengakses Data

Baiklah, berikut adalah kode Python secara bertahap untuk membaca data fail JSON:

**Tahap 1: Mengimpor modul JSON**

Pertama-tama, kita perlu mengimpor modul JSON ke dalam kode kita. Modul JSON menyediakan fungsi-fungsi untuk membaca dan menulis data JSON.

```python
import json
```

**Tahap 2: Membuka fail JSON**

Selanjutnya, kita perlu membuka fail JSON yang ingin kita baca. Kita dapat menggunakan fungsi `open()` untuk membuka fail JSON.

```python
with open("barang.json", "r") as f:
```

Argumen pertama dari fungsi `open()` adalah nama fail JSON yang ingin kita buka. Argumen kedua adalah mode `r` yang berarti kita akan membuka fail JSON dalam mode baca.

**Tahap 3: Membaca data JSON**

Setelah fail JSON dibuka, kita dapat membaca data JSON menggunakan fungsi `json.load()`. Fungsi `json.load()` mengembalikan objek Python yang berisi data JSON.

```python
barang = json.load(f)
```

**Tahap 4: Mencetak data JSON**

Setelah data JSON dibaca, kita dapat mencetak data JSON menggunakan fungsi `print()`.

```python
print(barang)
```

Output dari kode Python tersebut adalah sebagai berikut:

```json
[{'kode': 1, 'nama': 'Pensil', 'harga': 2000}, {'kode': 2, 'nama': 'Penghapus', 'harga': 1000}, {'kode': 3, 'nama': 'Penggaris', 'harga': 1500}, {'kode': 4, 'nama': 'Ballpoint', 'harga': 5000}]
```

Jika ingin menampilkan data dengan format lebih rapi, bisa dicoba dengan memberikan indentasi dari setiap objek dan itemnya. Contohnya seperti ini.

```python
print(json.dumps(barang, indent=4))
```

Baris kode tersebut akan mencetak data JSON dalam format yang lebih mudah dibaca. Fungsi `json.dumps()` digunakan untuk mengkonversi data Python ke format JSON. Argumen pertama dari fungsi `json.dumps()` adalah data Python yang ingin dikonversi. Argumen kedua adalah opsi `indent`, yang menentukan jumlah spasi yang digunakan untuk indentasi data JSON.

Dalam kasus ini, kita menggunakan opsi `indent=4` untuk membuat indentasi dengan empat spasi.

Luarannya seperti ini.

```json
[
    {
        "kode": 1,
        "nama": "Pensil",
        "harga": 2000
    },
    {
        "kode": 2,
        "nama": "Penghapus",
        "harga": 1000
    },
    {
        "kode": 3,
        "nama": "Penggaris",
        "harga": 1500
    },
    {
        "kode": 4,
        "nama": "Ballpoint",
        "harga": 5000
    }
]
```

**Tahap 5: Menyaring barang dengan harga di atas 2000**

Kita dapat menggunakan kode Python berikut untuk menyaring barang dengan harga lebih besar atau sama dengan 2000:

```python
# Cari semua barang dengan harga lebih besar atau sama dengan 2000
barang_mahal = []
for item in barang:
    if item["harga"] >= 2000:
        barang_mahal.append(item)

# Cetak daftar barang mahal
print(barang_mahal)
```

Luaran dari kode Python tersebut adalah sebagai berikut:

```json
[
    {
        "kode": 1,
        "nama": "Pensil",
        "harga": 2000
    },
    {
        "kode": 4,
        "nama": "Ballpoint",
        "harga": 5000
    }
]
```

Kode Python ini menggunakan perulangan `for` untuk iterasi melalui semua objek JSON dalam daftar `barang`. Untuk setiap objek JSON, kode ini memeriksa properti `harga`. Jika nilai properti `harga` lebih besar atau sama dengan 2000, maka kode ini menambahkan objek JSON tersebut ke dalam daftar `barang_mahal`.

**Kode Python lengkap**

Berikut adalah kode Python lengkap untuk membaca data fail JSON:

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Tampilan standar
print(barang)

# Tampilan yang lebih rapi/cantik dengan indentasi 4
print(json.dumps(barang, indent=4))

# Cari semua barang dengan harga di atas 2000
barang_mahal = []
for item in barang:
    if item["harga"] >= 2000:
        barang_mahal.append(item)

# Cetak daftar barang mahal
#print(barang_mahal)
print(json.dumps(barang_mahal, indent=4))
```

Kode Python ini adalah gabungan dari semua tahap yang telah kita bahas sebelumnya.

# Pemrograman: Menambah Data

Untuk melakukan penambahan data, pertama-tama kita siapkan sebuah contoh data (objek) sebagai berikut.

```json
{
    "kode": 5,
    "nama": "Buku",
    "harga": 10000
}
```

Kode Python untuk menambah data secara lengkap adalah sebagai berikut.

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Tambahkan data barang baru
barang.append({
    "kode": 5,
    "nama": "Buku",
    "harga": 10000
})

# Simpan data barang yang telah diubah
with open("barang.json", "w") as f:
    json.dump(barang, f)
```

Kode Python ini akan menambah data barang baru ke fail JSON `barang.json`. Data barang baru memiliki kode 5, nama "Buku", dan harga 10000.

Beberapa kode yang perlu dijelaskan selain yang pernah dibahas sebelumnya adalah:

* `barang.append({}`): digunakan untuk menambahkan data barang baru ke daftar `barang`.
    
* `{ "kode": 5, "nama": "Buku", "harga": 10000 }` adalah data barang baru yang akan ditambahkan.
    
* `with open("barang.json", "w") as f:` digunakan untuk membuka fail JSON `barang.json` dalam mode tulis.
    
* `json.dump(barang, f):` digunakan untuk menulis data JSON dari variabel `barang` ke fail `barang.json`.
    

Jika fail json dibaca dan ditampilkan secara keseluruhan akan memunculkan lima objek, dengan tambahan barang terbaru yang baru saja ditambahkan.

# Pemrograman: Mencari Data

Dalam bagian akan menambahkan contoh pencarian data barang berdasarkan kode dan nama. Untuk pencarian harga sudah dicontohkan dalam bagian akhir Membaca Data.

Berikut adalah contoh kode untuk mencari data barang berdasarkan kode:

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Cari barang dengan kode 1
for item in barang:
    if item["kode"] == 1:
        print(item)
```

Adapun untuk mencari barang berdasarkan nama, potongan kodenya adalah sebagai berikut.

```python
# Cari barang dengan nama "Pensil"
for item in barang:
    if item["nama"] == "Pensil":
        print(item)
```

Untuk membuat pencarian nama barang lebih dinamis, potongan kodenya adalah sebagai berikut.

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Cari barang yang namanya mengandung huruf/kata "peng" (tanpa memperhatikan huruf besar atau kecil)
barang_cari = []
kataCari = "peng"

for item in barang:
    if kataCari.lower() in item["nama"].lower():
        barang_cari.append(item)

# Cetak daftar barang pensil
print(barang_cari)
```

Sedikit penjelasan beberapa bagian dari kode tersebut adalah:

* `barang_cari = []:` digunakan untuk membuat daftar barang yang namanya mengandung huruf atau kata "peng".
    
* `kataCari = "peng":` digunakan untuk menentukan huruf atau kata yang akan dicari.
    
* `for item in barang:` digunakan untuk iterasi melalui semua data barang dalam variabel `barang`.
    
* `kataCari.lower() in item["nama"].lower()` digunakan untuk memeriksa apakah huruf atau kata "peng" terdapat di dalam nama barang, dengan huruf kecil.
    
* `barang_cari.append(item):` digunakan untuk menambahkan data barang tersebut ke dalam daftar `barang_cari`.
    
* `print(barang_cari):` digunakan untuk mencetak daftar barang yang namanya mengandung huruf atau kata "peng".
    

Contoh luaran dari kode tersebut di atas adalah:

```json
[
    {
        "kode": 2,
        "nama": "Penghapus",
        "harga": 1000
    },
    {
        "kode": 3,
        "nama": "Penggaris",
        "harga": 1500
    }
]
```

# Pemrograman: Mengubah Data

Untuk mencontohkan pengubahan atau pembaruan data, kita buat contoh mengubah data barang yang kodenya 5, nama "Buku", harga 10000 menjadi nama baru "Buku Tulis", harga baru 15000.

Kodenya adalah sebagai berikut.

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Cari data barang dengan kode 5
for item in barang:
    if item["kode"] == 5:
        # Ubah nama dan harga
        item["nama"] = "Buku Tulis"
        item["harga"] = 15000

# Simpan data barang yang telah diubah
with open("barang.json", "w") as f:
    json.dump(barang, f)

# Cetak daftar barang
print(barang)
```

Beberapa penjelasan hanya di bagian penting:

* `for item in barang:` digunakan untuk iterasi melalui semua data barang dalam variabel `barang`.
    
* `if item["kode"] == 5:` digunakan untuk memeriksa apakah kode barang yang sedang diproses sama dengan 5.
    
* `item["nama"] = "Buku Tulis"` digunakan untuk mengubah nama barang.
    
* `item["harga"] = 15000` digunakan untuk mengubah harga barang.
    
* `with open("barang.json", "w") as f:` digunakan untuk membuka file `barang.json` dalam mode penulisan.
    
* `json.dump(barang, f)` digunakan untuk menyimpan data barang ke file `barang.json`.
    
* `print(barang):` digunakan untuk mencetak daftar barang.
    

Kode alternatif untuk mengubah data barang adalah sebagai berikut.

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Cari data barang dengan kode 5
data_barang = barang[barang.index({"kode": 5})]

# Ubah nama dan harga
data_barang["nama"] = "Buku Tulis"
data_barang["harga"] = 15000

# Ganti data barang yang telah diubah
barang[barang.index({"kode": 5})] = data_barang

# Simpan data barang yang telah diubah
with open("barang.json", "w") as f:
    json.dump(barang, f)

# Cetak daftar barang
print(barang)
```

Kode ini akan melakukan langkah-langkah yang sama dengan kode sebelumnya, tetapi dengan cara yang lebih singkat.

Berikut adalah penjelasan lebih rinci tentang kode tersebut:

* `barang[barang.index({"kode": 5})]` digunakan untuk mengambil data barang dengan kode 5.
    
* `data_barang["nama"] = "Buku Tulis"` digunakan untuk mengubah nama barang.
    
* `data_barang["harga"] = 15000` digunakan untuk mengubah harga barang.
    
* `barang[barang.index({"kode": 5})] = data_barang` digunakan untuk mengganti data barang yang telah diubah.
    

Output dari kode tersebut adalah sebagai berikut:

```json
[{'kode': 1, 'nama': 'Pensil', 'harga': 2000}, {'kode': 2, 'nama': 'Penggaris', 'harga': 5000}, {'kode': 3, 'nama': 'Rautan', 'harga': 1000}, {'kode': 4, 'nama': 'Ballpoint', 'harga': 5000}, {'kode': 5, 'nama': 'Buku Tulis', 'harga': 15000}]
```

# Pemrograman: Menghapus Data

Untuk menghapus data, mekanismenya mirip dengan mengubah data. Bedanya, data barang yang dicari akan dihapus dari fail JSON.

Berikut contoh kode untuk menghapus data barang dengan kode 5.

```python
import json

with open("barang.json", "r") as f:
    barang = json.load(f)

# Cari data barang dengan kode 5
for item in barang:
    if item["kode"] == 5:
        # Hapus data barang
        barang.remove(item)

# Simpan data barang yang telah dihapus
with open("barang.json", "w") as f:
    json.dump(barang, f)

# Cetak daftar barang
print(barang)
```

Poin penting menghapus data adalah pada kode ini.

* `barang.remove(item):` digunakan untuk menghapus data barang dari daftar.
    

Alternatif lainnya seperti pada kode mengubah data sebelumnya adalah:

```python
# Cari data barang dengan kode 5
data_barang = barang[barang.index({"kode": 5})]

# Hapus data barang
barang.remove(data_barang)
```

# Penutup

Selamat, Anda telah menyelesaikan tutorial tentang membaca, mencari, menambah, mengubah, dan menghapus data di file JSON menggunakan Python. Sekarang, Anda dapat menggunakan keterampilan ini untuk mengembangkan berbagai aplikasi yang membutuhkan penyimpanan dan pengelolaan data dalam format JSON.

Berikut adalah beberapa tips untuk mengembangkan aplikasi berbasis JSON:

* Gunakan struktur JSON yang sesuai dengan kebutuhan aplikasi Anda.
    
* Gunakan metode JSON yang tepat untuk membaca dan menulis data JSON.
    
* Validasi data JSON sebelum menggunakannya.
    
* Gunakan library JSON pihak ketiga untuk memudahkan pengembangan aplikasi Anda.
    

Berikutnya akan saya tuliskan tutorial mengemas aplikasi pengelolaan fail JSON dalam format online atau versi *website*.

Repositori kode dalam tutorial ini ada di:  
[https://github.com/galihboy/json\_crud](https://github.com/galihboy/json_crud)

Semoga tutorial ini bermanfaat bagi Anda. Tetap semangat belajar dan mengembangkan aplikasi yang bermanfaat!
