jsonlite ile JSON Ayrıştırma
fromJSON() ile JSON dizelerini R listelerine ve veri çerçevelerine dönüştürün.
jsonlite ile JSON Ayrıştırma, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
JSON Nedir?
JSON (JavaScript Object Notation), API'ler ve web hizmetleri için evrensel veri değişim biçimidir. R'nin jsonlite paketi, düzenli veri kurallarını izleyerek JSON'u R nesnelerine (listeler, veri çerçeveleri) ve tekrar JSON'a dönüştürür.
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(): Temel Ayrıştırma
fromJSON(txt), bir JSON dizesini, URL'yi veya dosya yolunu ayrıştırır. JSON türlerini otomatik olarak dönüştürür: dizeler → karakter, sayılar → sayısal, boole değerleri → mantıksal, null → NA, diziler → vektörler, nesneler → adlandırılmış listeler.
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(): R'yi JSON'a Serileştirme
toJSON(x), R nesnelerini JSON dizelerine dönüştürür. Uzunluğu 1 olan vektörleri JSON skalerlerine (dizilere değil) dönüştürmek için auto_unbox=TRUE kullanın. pretty=TRUE, okunabilirlik için girinti ekler.
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]
# }JSON Dizilerini Veri Çerçevelerine Dönüştürme
Nesnelerden oluşan JSON dizileri, fromJSON() ile otomatik olarak veri çerçevelerine dönüştürülür. Bu, jsonlite'ın en kullanışlı özelliklerinden biridir — API yanıtları genellikle veri çerçevelerine mükemmel şekilde uyan kayıt dizileridir.
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 92Veri Çerçevesini JSON'a Dönüştürme
Bir veri çerçevesini toJSON(df) ile JSON'a dönüştürmek, nesnelerden oluşan bir JSON dizisi üretir (her satır için bir nesne). Bu, tablo verilerini web API'lerine göndermek için kullanılan standart biçimdir.
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))Bir URL'den fromJSON()
fromJSON(url), bir URL'deki JSON verilerini doğrudan alıp ayrıştırabilir. Kimlik doğrulaması gerektirmeyen herkese açık bir JSON API'sini çağırmanın en basit yolu budur.
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() ve minify()
prettify(json_string), insanların okuyabilmesi için girinti ve satır sonları ekler. minify(json_string), sıkıştırılmış aktarım için boşlukları kaldırır. Her ikisi de ham JSON dizeleri üzerinde çalışır.
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))İç İçe Nesneler İçin flatten=TRUE
JSON içinde iç içe nesneler bulunduğunda fromJSON(json, flatten=TRUE), iç içe anahtarları noktayla ayrılmış sütun adlarına dönüştürür. Böylece elle iç içelikten çıkarma işlemi yapmadan veri çerçevesiyle çalışmak kolaylaşır.
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 LANA ve Eksik Anahtarlarla JSON İşleme
JSON null değeri R'de NA değerine dönüştürülür. JSON dizilerindeki eksik anahtarlar (bir kayıtta bulunan bir alan başka bir kayıtta bulunmadığında), elde edilen veri çerçevesinde NA ile doldurulur.
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>JSON'ı Dosyalara Yazma
R nesnelerini JSON dosyaları olarak kaydetmek için write_json() (veya writeLines(toJSON(x), file)) kullanın. Bu, verileri web uygulamalarıyla veya API'lerle paylaşmak için kullanılan standart çıktı biçimidir.
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')JSON'ı Doğrulama
jsonlite paketindeki validate(json_string), bir dizenin geçerli JSON olup olmadığını denetler ve TRUE/FALSE döndürür. Ayrıştırmadan önce, özellikle hatalı olabilecek kullanıcı girdileri veya API yanıtları işlenirken kullanışlıdır.
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}')Hızlı Kontrol
R'de jsonlite ile JSON ayrıştırma konusundaki bilginizi sınayın.
Özet: jsonlite ile JSON
Temel çıkarımlar: fromJSON(), JSON dizelerini, URL'leri ve dosyaları R listelerine veya veri çerçevelerine ayrıştırır. toJSON(), R nesnelerini JSON'a dönüştürür — skaler değerler için auto_unbox=TRUE kullanın. prettify()/minify(), dizeleri biçimlendirir. flatten=TRUE, iç içe nesneleri düzleştirir. JSON null değeri NA olur. validate(), ayrıştırmadan önce JSON'ın geçerliliğini denetler.
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"}') # TRUESıkça Sorulan Sorular
“jsonlite ile JSON Ayrıştırma” dersi ücretsiz mi?
Evet — “jsonlite ile JSON Ayrıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“jsonlite ile JSON Ayrıştırma” dersinde ne öğreneceğim?
fromJSON() ile JSON dizelerini R listelerine ve veri çerçevelerine dönüştürün. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“jsonlite ile JSON Ayrıştırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- jsonlite ile JSON Ayrıştırma
- httr2 ile HTTP İstekleri Gönderme
- R'de REST API'lerini Kullanma
- İç İçe JSON Yapılarını İşleme