Panduan Menggunakan JSON di Go

JSON (JavaScript Object Notation) adalah format data yang sangat serbaguna dan sangat populer. Ini sering digunakan untuk komunikasi antara aplikasi web dan juga sebagai cara mudah untuk menyimpan sejumlah besar data aplikasi terstruktur.


JSON sangat berguna sehingga hampir semua bahasa pemrograman modern menyediakan dukungan bawaan untuk bekerja dengannya, termasuk Go.


Bekerja dengan JSON di Go

Anda dapat membagi sebagian besar pekerjaan yang akan Anda lakukan dengan JSON menjadi dua kategori umum: marshaling dan unmarshaling. Wikipedia mendefinisikan marshaling sebagai:

Dalam ilmu komputer, marshaling adalah proses mengubah representasi memori suatu objek ke dalam format data yang sesuai untuk penyimpanan atau transmisi. Ini biasanya digunakan ketika data harus dipindahkan antara bagian yang berbeda dari program komputer atau dari satu program ke program lainnya.

Dalam istilah yang lebih sederhana, marshaling adalah proses mengubah data yang disimpan dalam variabel menjadi bentuk yang lebih mudah untuk diteruskan ke program lain. Unmarshaling adalah proses sebaliknya: ini melibatkan pengambilan data yang diformat untuk transportasi dan mengubahnya menjadi bentuk yang lebih mudah digunakan oleh program Anda.

Dengan menggunakan Go, Anda dapat menyusun struktur data asli ke dalam JSON. Dan Anda dapat melakukan tindakan sebaliknya, membongkar data JSON ke dalam variabel Go.

Marshaling ke JSON di Go

Go menyediakan paket encoding/json untuk memudahkan Anda bekerja dengan JSON. Paket ini berisi beberapa fungsi, tetapi yang akan Anda gunakan untuk menyusun adalah Marsekal fungsi. Marsekal memiliki tanda tangan fungsi berikut:

See also  GraphQL: Alternatif untuk REST di HTTP

func Marshal(v interface{}) ([]byte, error)

Ini berarti bahwa Marsekal menerima parameter tipe data apa pun, dan mengembalikan dua nilai: sepotong byte, dan kesalahan. Dengan kata lain, Anda memanggil Marsekal dengan nilai Go, dan mengubahnya menjadi JSON dan mengembalikan setara JSON. Jika menemukan kesalahan selama proses konversi, itu akan mengembalikan kesalahan dan irisan kosong.

Berikut adalah contoh kode yang menggunakan Marsekal untuk mengonversi peta ke JSON. Untuk menjalankan contoh ini, yang Anda butuhkan hanyalah membuat file Go di editor kode favorit Anda, atau gunakan taman bermain Go:

package main

import (
"encoding/json"
"fmt"
)

func main() {
val := map[string]int{
"john": 25,
"mary": 19,
"adam": 5,
}

res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Jika Anda menjalankan kode itu, itu akan menampilkan yang berikut:

Seperti yang disebutkan sebelumnya, Anda dapat menyusun semua jenis data Go ke JSON, meskipun dalam kehidupan nyata Anda biasanya akan menyusun struct. Karena itu, Go menyediakan fitur yang disebut tag struct untuk memungkinkan Anda memberi Marsekal instruksi tambahan untuk mengonversi struct Anda.

Tag struct adalah string yang Anda sertakan dalam deklarasi struct Anda di sebelah tipe data bidang. Tag struktural memungkinkan Anda menyesuaikan caranya Marsekal memperlakukan bidang yang menjadi milik tag. Anda dapat menggunakan tag struct untuk mengganti nama bidang dalam output JSON, atau bahkan menghilangkannya sama sekali. Tag struktur (itu Marsekal mengenali) mulai dengan substring “json:”.

Sebagai contoh, Katakanlah Anda memiliki struct Mobil yang mewakili beberapa informasi tentang mobil. Berikut kode untuk membuat Mobil dan menyusunnya ke JSON:

See also  Cara Melintasi DOM Menggunakan JavaScript

package main

import (
"encoding/json"
"fmt"
)

func main() {
type Car struct {
Brand string
Model string
Price int
}
val := Car{Brand: "Mercedes", Model: "Benz", Price: 50000}
res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Kode ini menghasilkan output:

Itu Merek, Modeldan Harga bidang Mobil harus dimulai dengan huruf besar, atau Marsekal tidak akan dapat mengonversinya. Ini menghasilkan bidang keluaran JSON yang dimulai dengan huruf besar juga. Tetapi bagaimana jika Anda ingin nama dimulai dengan huruf kecil di JSON, atau jika Anda ingin mengganti nama bidang seluruhnya? Di situlah tag struct masuk. Berikut ini contohnya:

package main
import (
"encoding/json"
"fmt"
)
func main() {
type Car struct {
ID int `json:"-"`
Brand string `json:"type"`
Model string `json:"model"`
Price int `json:"price"`
}
val := Car{ID: 0, Brand: "Mercedes", Model: "Benz", Price: 50000}
res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Kode ini memperkenalkan bidang ID baru yang Marsekal menghilangkan dari output JSON melalui tag struct. Kode juga menggunakan tag struct untuk mengganti nama bidang struct lainnya. Berikut keluaran programnya:

Seperti yang Anda lihat, bagian dari tag struct setelah “json:” menjadi nama bidang dalam output Marshal. Ada satu pengecualian: jika string “-“, Marshal menghilangkan bidang itu dari output. Anda dapat membaca lebih lanjut tentang Marshal dan tag struct di dokumentasi Go.

Unmarshaling Dari JSON di Go

Paket encoding/json juga menyediakan fungsi unmarshaling, yang disebut Unmarshal. Ini memiliki tanda tangan fungsi berikut:

func Unmarshal(data []byte, v interface{}) error

Tidak seperti Marsekal, Unmarshal tidak mengembalikan nilai. Sebaliknya, ia menerima JSON sebagai sepotong byte dalam argumen pertama dan kemudian menyimpan data yang dikonversi dalam objek yang ditunjuk oleh argumen kedua. Unmarshal bekerja dengan tag struct juga, tetapi di sini, tag memberi tahu Unmarshal bidang JSON mana yang cocok dengan bidang struct mana.

See also  Cara Mengatur dan Menggunakan Siri di iPhone 13

Saat membuka marshaling dalam suatu program, Anda mungkin mengambil data dari API, tetapi di sini Anda akan menggunakan data dummy. Inilah cara Anda menggunakan Unmarshal:

package main

import (
"encoding/json"
"fmt"
)

func main() {
type Car struct {
ID int `json:"-"`
Brand string `json:"type"`
Model string `json:"model"`
Price int `json:"price"`
}

jsonInput := `{
"type": "Toyota",
"model": "Camry",
"price": 2000
}`

var jsonOutput Car
err := json.Unmarshal([]byte(jsonInput), &jsonOutput)

if err != nil {
fmt.Println("JSON decode error!")
return
}

fmt.Println(jsonOutput)
}

Kode ini menggunakan tipe Car yang sama seperti contoh sebelumnya, dan kode ini membuka marshal objek JSON ke dalam struct tipe Car, lalu mencetak data dalam struct. Saat dijalankan, program menghasilkan output ini:

Ini menunjukkan bahwa data JSON dummy berhasil dibongkar ke dalam jsonOutput struktur.

Go Memudahkan Bekerja Dengan JSON

Dengan paket encoding/json, bekerja dengan JSON di Go semudah dua panggilan fungsi: Marshal dan Unmarshal. Go juga memungkinkan Anda menyesuaikan proses marshaling/unmarshaling JSON dengan tag struct.

Mengonversi data ke JSON adalah cara yang bagus untuk membagikannya dengan program atau proses lain. Formatnya sangat universal sehingga JSON dapat dibawa-bawa.