Mengurai JSON dengan jsonlite
Konversikan string JSON menjadi daftar dan kerangka data R dengan fromJSON().
Mengurai JSON dengan jsonlite adalah pelajaran R 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 R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu JSON?
JSON (JavaScript Object Notation) adalah format pertukaran data universal untuk API dan layanan web. Paket jsonlite milik R mengonversi JSON menjadi objek R (daftar, bingkai data) dan sebaliknya, dengan mengikuti konvensi rapi.
library(jsonlite)
# JSON looks like:
# { "name": "Alice", "age": 30, "active": true }
# fromJSON parses JSON string to R object
json_str <- '{"name":"Alice","age":30,"active":true}'
result <- fromJSON(json_str)
class(result) # 'list'
result$name # 'Alice'
result$age # 30 (numeric)
result$active # TRUE (logical)fromJSON(): Penguraian Dasar
fromJSON(txt) mengurai string JSON, URL, atau jalur berkas. Fungsi ini secara otomatis mengonversi jenis JSON: string → karakter, angka → numerik, boolean → logika, null → NA, larik → vektor, objek → daftar bernama.
library(jsonlite)
# Parsing different JSON types
fromJSON('"hello"') # character: 'hello'
fromJSON('42') # numeric: 42
fromJSON('true') # logical: TRUE
fromJSON('null') # NA
fromJSON('[1, 2, 3]') # numeric vector: c(1,2,3)
fromJSON('["a", "b", "c"]') # character vector
# Nested object
json <- '{"x": 1, "y": [2, 3], "z": null}'
obj <- fromJSON(json)
obj$x # 1
obj$y # c(2, 3)
obj$z # NAtoJSON(): Membuat Serialisasi R ke JSON
toJSON(x) mengonversi objek R menjadi string JSON. Gunakan auto_unbox=TRUE untuk mengonversi vektor dengan panjang 1 menjadi skalar JSON (bukan larik). pretty=TRUE menambahkan indentasi agar mudah dibaca.
library(jsonlite)
# Basic serialization
toJSON(c(1, 2, 3)) # '[1,2,3]'
toJSON(list(a=1, b='two')) # '{"a":[1],"b":["two"]}'
# auto_unbox: length-1 vectors become scalars
toJSON(list(name='Bob', age=25), auto_unbox = TRUE)
# '{"name":"Bob","age":25}'
# pretty printing
cat(toJSON(list(x=1, y=c(2,3)), pretty = TRUE))
# {
# "x": [1],
# "y": [2, 3]
# }Array JSON menjadi Kerangka Data
Array JSON yang berisi objek secara otomatis dikonversi menjadi kerangka data dengan fromJSON(). Ini adalah salah satu fitur jsonlite yang paling berguna — respons API sering kali berupa array rekaman yang sangat sesuai untuk kerangka data.
library(jsonlite)
# JSON array of objects -> data frame
json_array <- '[
{"name": "Alice", "age": 30, "score": 95},
{"name": "Bob", "age": 25, "score": 87},
{"name": "Carol", "age": 35, "score": 92}
]'
df <- fromJSON(json_array)
class(df) # 'data.frame'
nrow(df) # 3
print(df)
# name age score
# Alice 30 95
# Bob 25 87
# Carol 35 92Kerangka Data menjadi JSON
Mengonversi kerangka data menjadi JSON dengan toJSON(df) menghasilkan array JSON yang berisi objek (satu objek untuk setiap baris). Ini adalah format standar untuk mengirim data tabular ke API web.
library(jsonlite)
df <- data.frame(
product = c('Apple', 'Banana', 'Cherry'),
price = c(1.20, 0.50, 3.00),
in_stock = c(TRUE, TRUE, FALSE),
stringsAsFactors = FALSE
)
# Default: each value is an array (even scalars)
cat(toJSON(df, pretty = FALSE))
# auto_unbox: single values become JSON scalars
cat('\n---\n')
cat(toJSON(df, auto_unbox = TRUE, pretty = TRUE))fromJSON() dari URL
fromJSON(url) dapat langsung mengambil dan mengurai JSON dari URL. Ini adalah cara paling sederhana untuk memanggil API JSON publik yang tidak memerlukan autentikasi.
library(jsonlite)
# Read JSON directly from a URL (requires internet)
# Example: JSONPlaceholder (free test API)
# result <- fromJSON('https://jsonplaceholder.typicode.com/todos/1')
# result$title # todo title
# result$completed # TRUE/FALSE
# Example: GitHub API
# repos <- fromJSON('https://api.github.com/users/hadley/repos')
# repos$name # vector of repo names
# nrow(repos) # number of repos returned
# Simulate with local JSON string:
result <- fromJSON('{"id":1,"title":"Learn R","completed":false}')
cat('Task:', result$title, '\nDone:', result$completed)prettify() dan minify()
prettify(json_string) menambahkan indentasi dan baris baru agar mudah dibaca manusia. minify(json_string) menghapus spasi kosong agar transmisi lebih ringkas. Keduanya beroperasi pada string JSON mentah.
library(jsonlite)
# Compact (minified) JSON
compact_json <- '{"name":"Alice","scores":[95,87,92],"active":true}'
cat('Minified:\n', compact_json, '\n\n')
# Prettify: add whitespace
cat('Prettified:\n')
cat(prettify(compact_json))
# {
# "name": "Alice",
# "scores": [95, 87, 92],
# "active": true
# }
# Minify: remove whitespace
pretty_json <- prettify(compact_json)
cat('\nRe-minified:\n')
cat(minify(pretty_json))flatten=TRUE untuk Objek Bertingkat
Jika JSON memiliki objek bertingkat, fromJSON(json, flatten=TRUE) meratakan kunci bertingkat menjadi nama kolom yang dipisahkan titik, sehingga lebih mudah digunakan sebagai kerangka data tanpa harus meratakan struktur secara manual.
library(jsonlite)
json <- '[
{"id": 1, "user": {"name": "Alice", "city": "NY"}},
{"id": 2, "user": {"name": "Bob", "city": "LA"}}
]'
# Without flatten: nested list column
df_nested <- fromJSON(json)
class(df_nested$user) # data.frame (nested!)
# With flatten: flat column names
df_flat <- fromJSON(json, flatten = TRUE)
names(df_flat) # c('id', 'user.name', 'user.city')
print(df_flat)
# id user.name user.city
# 1 Alice NY
# 2 Bob LAMenangani NA dan Kunci yang Hilang dalam JSON
JSON null dipetakan ke NA milik R. Kunci yang hilang dalam array JSON (ketika satu rekaman memiliki bidang yang tidak dimiliki rekaman lain) akan diisi dengan NA dalam kerangka data yang dihasilkan.
library(jsonlite)
# JSON with null values
json_nulls <- '{"a": 1, "b": null, "c": "hello"}'
obj <- fromJSON(json_nulls)
obj$b # NA
is.na(obj$b) # TRUE
# Array with missing keys
json_missing <- '[
{"name": "Alice", "age": 30, "email": "a@b.com"},
{"name": "Bob", "age": 25}
]'
# 'email' missing from second record
df <- fromJSON(json_missing)
print(df)
# name age email
# Alice 30 a@b.com
# Bob 25 <NA>Menulis JSON ke File
Gunakan write_json() (atau writeLines(toJSON(x), file)) untuk menyimpan objek R sebagai file JSON. Ini adalah format keluaran standar untuk berbagi data dengan aplikasi web atau API.
library(jsonlite)
results <- list(
model = 'linear_regression',
coefficients = list(intercept = 2.5, slope = 1.3),
r_squared = 0.87,
n_obs = 100
)
# Convert to JSON string
json_output <- toJSON(results, auto_unbox = TRUE, pretty = TRUE)
cat(json_output)
# Save to file (uncomment):
# write_json(results, 'model_results.json',
# auto_unbox = TRUE, pretty = TRUE)
# Or equivalently:
# writeLines(json_output, 'model_results.json')Memvalidasi JSON
validate(json_string) dari jsonlite memeriksa apakah suatu string merupakan JSON yang valid, lalu mengembalikan TRUE/FALSE. Ini berguna sebelum penguraian, terutama saat menangani input pengguna atau respons API yang mungkin memiliki format tidak valid.
library(jsonlite)
# Valid JSON
validate('{"name": "Alice", "age": 30}') # TRUE
validate('[1, 2, 3]') # TRUE
validate('"just a string"') # TRUE
# Invalid JSON
validate('{name: Alice}') # FALSE (unquoted keys)
validate('[1, 2, 3,]') # FALSE (trailing comma)
validate('') # FALSE
# Safe parsing pattern
safe_parse <- function(json) {
if (!validate(json)) {
warning('Invalid JSON')
return(NULL)
}
fromJSON(json)
}
safe_parse('{"x": 1}')
safe_parse('{bad json}')Pemeriksaan Singkat
Uji pengetahuan Anda tentang penguraian JSON dengan jsonlite di R.
Ringkasan: JSON dengan jsonlite
Hal-hal penting: fromJSON() mengurai string JSON, URL, dan file menjadi daftar R atau kerangka data. toJSON() mengonversi R menjadi JSON — gunakan auto_unbox=TRUE untuk nilai skalar. prettify()/minify() memformat string. flatten=TRUE meratakan objek bertingkat. JSON null menjadi NA. validate() memeriksa validitas JSON sebelum penguraian.
library(jsonlite)
# Complete jsonlite workflow:
# Parse
df <- fromJSON('[{"a":1,"b":2},{"a":3,"b":4}]')
print(df)
# Serialize
json <- toJSON(df, auto_unbox = TRUE, pretty = FALSE)
cat(json, '\n')
# Flatten nested
nested <- fromJSON(
'[{"id":1,"x":{"val":10}},{"id":2,"x":{"val":20}}]',
flatten = TRUE
)
print(nested)
# Validate before parse
validate('{"key": "value"}') # TRUEPertanyaan yang Sering Diajukan
Apakah pelajaran “Mengurai JSON dengan jsonlite” gratis?
Ya — teks lengkap “Mengurai JSON dengan jsonlite” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengurai JSON dengan jsonlite”?
Konversikan string JSON menjadi daftar dan kerangka data R dengan fromJSON(). Kamu berlatih R 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 R Academy?
Tidak diperlukan pengalaman sebelumnya. R 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 “Mengurai JSON dengan jsonlite” 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 R Academy ini?
Ya. Setiap pelajaran R 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
- Mengurai JSON dengan jsonlite
- Membuat Permintaan HTTP dengan httr2
- Menggunakan API REST di R
- Menangani Struktur JSON Bertingkat