Skip to content
jsonforge.app
Kembali ke blog
Tutorial15 menit baca

Contoh JSON dalam 7 Bahasa: JavaScript, Python, Go, Rust, PHP, Java, C#

JSON bersifat universal, tetapi setiap bahasa menanganinya secara berbeda. Ini adalah referensi berdampingan untuk parsing, serialisasi, dan penanganan error di tujuh bahasa populer.

JavaScript

JavaScript adalah rumah native JSON. Lakukan parsing dengan JSON.parse, serialisasi dengan JSON.stringify, dan selalu bungkus parsing dalam try/catch.

typescript
// Parse a JSON string into an object (always guard with try/catch)
let data;
try {
  data = JSON.parse('{"name": "Alice", "age": 30}');
  console.log(data.name); // "Alice"
} catch (err) {
  console.error("Invalid JSON:", err.message);
}

// Serialize an object back to JSON
const json = JSON.stringify(data, null, 2);

// Fetch JSON from an API (res.json() rejects on invalid JSON)
const res = await fetch("/api/users/1");
const user = await res.json(); // parsed automatically

Python

Modul json bawaan Python memetakan object JSON ke dict dan array ke list. Gunakan json.loads (string → object) dan json.dumps (object → string).

python
import json

# Parse JSON string into a dict
data = json.loads('{"name": "Alice", "age": 30}')

# Serialize a dict to a pretty JSON string
text = json.dumps(data, indent=2, ensure_ascii=False)

# Read/write a JSON file
with open("data.json", encoding="utf-8") as f:
    data = json.load(f)

Go

Paket encoding/json milik Go memetakan JSON ke struct melalui tag. Gunakan json.Marshal untuk serialisasi dan json.Unmarshal untuk parsing, dengan struct tag mengatur nama field.

go
type User struct {
    Name string   `json:"name"`
    Age  int      `json:"age"`
}

// Struct → JSON
b, _ := json.Marshal(User{Name: "Alice", Age: 30})

// JSON → struct
var u User
_ = json.Unmarshal([]byte(`{"name":"Bob","age":25}`), &u)

Rust

Rust menggunakan crate serde dan serde_json untuk (de)serialisasi yang aman tipe dan tanpa biaya (zero-cost). Derive Serialize/Deserialize pada sebuah struct dan serde_json menangani sisanya — termasuk pesan error yang presisi dengan baris dan kolom saat parsing gagal.

rust
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct User {
    name: String,
    age: u8,
}

fn main() -> Result<(), serde_json::Error> {
    // JSON → struct
    let u: User = serde_json::from_str(r#"{"name":"Alice","age":30}"#)?;

    // Struct → JSON (pretty-printed)
    let json = serde_json::to_string_pretty(&u)?;
    println!("{}", json);
    Ok(())
}

PHP

PHP memiliki json_encode/json_decode native tanpa dependensi. Berikan true sebagai argumen kedua ke json_decode untuk mendapatkan array asosiatif alih-alih objek stdClass, dan selalu periksa json_last_error() — json_decode mengembalikan null saat gagal, yang juga merupakan nilai JSON yang valid.

php
<?php
// PHP array → JSON
$json = json_encode(["name" => "Alice", "age": 30],
    JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

// JSON → PHP array
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON error: " . json_last_error_msg();
}

Java

Java umumnya menggunakan ObjectMapper dari Jackson. Record (Java 16+) menghasilkan DTO yang bersih tanpa boilerplate — Jackson mengikatnya secara langsung, termasuk penanganan properti yang tidak dikenal melalui configure.

java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;

record User(String name, int age) {}

ObjectMapper mapper = new ObjectMapper()
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

// JSON → record
User user = mapper.readValue("{\"name\":\"Alice\",\"age\":30}", User.class);

// Record → JSON
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);

C#

C# modern menggunakan System.Text.Json (bawaan .NET). Atribut seperti JsonPropertyName memetakan konvensi penamaan JSON ke properti PascalCase, dan JsonSerializerOptions mengatur penggunaan huruf pada output.

csharp
using System.Text.Json;
using System.Text.Json.Serialization;

public class User
{
    [JsonPropertyName("name")]
    public string Name { get; set; } = "";

    [JsonPropertyName("age")]
    public int Age { get; set; }
}

// JSON → object
var user = JsonSerializer.Deserialize<User>(
    "{\"name\":\"Alice\",\"age\":30}")!;

// Object → JSON (camelCase to match JSON conventions)
var options = new JsonSerializerOptions {
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
string json = JsonSerializer.Serialize(user, options);

Praktik terbaik universal

Selalu tangani error parsing — JSON yang rusak akan membuat kode tak terlindungi crash. Untuk API produksi, validasi terhadap JSON Schema sebelum diproses. Utamakan struct/class bertipe daripada map generik di bahasa compiled. Pretty-print saat pengembangan, minify saat produksi.

FAQ

Bahasa mana yang memiliki parser JSON tercepat?
Bahasa compiled (Go, Rust, Java dengan Jackson, C# dengan System.Text.Json) umumnya mengungguli bahasa interpreted. Untuk sebagian besar aplikasi, perbedaannya dapat diabaikan dibandingkan dengan biaya jaringan dan database.
Apakah saya harus menggunakan struct bertipe atau map generik?
Struct/class bertipe menangkap ketidaksesuaian schema saat compile time dan memberi Anda autocomplete. Gunakan map generik hanya ketika bentuknya benar-benar dinamis atau tidak diketahui.

Artikel terkait