0Pricing
Go Academy · Pelajaran

Tinjauan encoding/json

Marshal dan unmarshal JSON

Tinjauan encoding/json adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

JSON di Go

JSON adalah format data yang paling umum untuk API. Paket standar Go, encoding/json, mengonversi nilai Go menjadi teks JSON dan sebaliknya.

Marshal: Go ke JSON

json.Marshal mengubah nilai Go menjadi sekumpulan byte JSON. Konversikan hasilnya menjadi string untuk mencetaknya.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

Serialisasi Struktur

Struktur diserialisasikan bidang demi bidang. Bidang yang diekspor menjadi kunci JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal: JSON ke Go

json.Unmarshal menguraikan byte JSON menjadi nilai Go. Berikan pointer agar fungsi tersebut dapat mengisi variabel Anda.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

Tag untuk Nama Kunci

Gunakan tag json untuk mengatur nama kunci, seperti yang dibahas sebelumnya. Di sini, Name dipetakan ke kunci JSON name.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Selalu Periksa Kesalahan

Marshal dan Unmarshal sama-sama mengembalikan kesalahan. Dalam kode nyata, jangan pernah mengabaikannya; JSON yang tidak valid atau jenis yang tidak didukung dapat menghasilkan kesalahan.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

Mendekode ke Peta

Saat bentuk data belum diketahui sebelumnya, lakukan Unmarshal ke map[string]interface{}.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

Slice dan Larik

Larik JSON dipetakan ke slice Go. Melakukan marshal pada sebuah slice menghasilkan larik JSON.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

Mencetak dengan Format Rapi

json.MarshalIndent menambahkan indentasi agar keluaran mudah dibaca manusia.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

Angka Menjadi float64

Saat mendekode ke interface{}, semua angka JSON menjadi float64 di Go. Konversikan secara eksplisit jika Anda memerlukan int.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

Siklus Bolak-Balik

Anda dapat melakukan marshal lalu unmarshal untuk menyalin data melalui JSON. Nilainya tetap utuh untuk jenis yang didukung.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

Pemeriksaan Singkat

Mengapa Anda harus memberikan pointer kepada json.Unmarshal?

Ringkasan

encoding/json:

  • json.Marshal mengubah nilai Go menjadi JSON
  • json.Unmarshal menguraikan JSON ke dalam pointer
  • Tag mengganti nama kunci; angka didekodekan sebagai float64 ke dalam interface{}
  • Selalu periksa kesalahan yang dikembalikan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tinjauan encoding/json” gratis?

Ya — teks lengkap “Tinjauan encoding/json” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tinjauan encoding/json”?

Marshal dan unmarshal JSON Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Tinjauan encoding/json” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tinjauan encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob dan Encoding Biner
← Kembali ke Go Academy