Analisi di JSON con jsonlite
Converta stringhe JSON in liste e data frame di R con fromJSON()
Analisi di JSON con jsonlite è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.
Che cos'è JSON?
JSON (JavaScript Object Notation) è il formato universale per lo scambio di dati utilizzato da API e servizi web. Il pacchetto jsonlite di R converte JSON in oggetti R (liste, data frame) e viceversa, seguendo convenzioni tidy.
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(): analisi di base
fromJSON(txt) analizza una stringa JSON, un URL o il percorso di un file. Converte automaticamente i tipi JSON: stringhe → character, numeri → numeric, booleani → logical, null → NA, array → vettori, oggetti → liste denominate.
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(): serializzare R in JSON
toJSON(x) converte gli oggetti R in stringhe JSON. Utilizzi auto_unbox=TRUE per convertire i vettori di lunghezza 1 in scalari JSON (non array). pretty=TRUE aggiunge l'indentazione per migliorare la leggibilità.
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 in data frame
Gli array JSON di oggetti vengono convertiti automaticamente in data frame con fromJSON(). Questa è una delle funzionalità più utili di jsonlite: le risposte delle API sono spesso array di record, perfettamente adatti ai data frame.
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 92Da data frame a JSON
La conversione di un data frame in JSON con toJSON(df) produce un array JSON di oggetti, uno per riga. Questo è il formato standard per inviare dati tabulari alle 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() da un URL
fromJSON(url) può recuperare e analizzare direttamente il JSON da un URL. È il modo più semplice per chiamare un'API JSON pubblica che non richiede autenticazione.
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() e minify()
prettify(json_string) aggiunge rientri e interruzioni di riga per rendere il contenuto leggibile. minify(json_string) rimuove gli spazi bianchi per una trasmissione compatta. Entrambe le funzioni operano su stringhe JSON non elaborate.
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 per gli oggetti annidati
Quando il JSON contiene oggetti annidati, fromJSON(json, flatten=TRUE) appiattisce le chiavi annidate trasformandole in nomi di colonna separati da punti. In questo modo è più facile lavorare con i dati come data frame senza doverli separare manualmente.
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 LAGestire NA e chiavi mancanti nel JSON
Il valore JSON null viene convertito in NA in R. Le chiavi mancanti negli array JSON, quando un record contiene un campo assente in un altro, vengono riempite con NA nel data frame risultante.
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>Scrivere JSON nei file
Utilizzi write_json() (oppure writeLines(toJSON(x), file)) per salvare gli oggetti R come file JSON. Questo è il formato di output standard per condividere dati con applicazioni web o 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')Convalidare il JSON
validate(json_string) di jsonlite verifica se una stringa è un JSON valido e restituisce TRUE/FALSE. È utile prima dell'analisi, soprattutto quando si gestiscono input dell'utente o risposte di API che potrebbero essere malformate.
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}')Verifica rapida
Verifichi le Sue conoscenze sull'analisi del JSON con jsonlite in R.
Riepilogo: JSON con jsonlite
Punti chiave: fromJSON() analizza stringhe JSON, URL e file e li converte in liste o data frame R. toJSON() converte gli oggetti R in JSON: utilizzi auto_unbox=TRUE per i valori scalari. prettify()/minify() formattano le stringhe. flatten=TRUE appiattisce gli oggetti annidati. Il valore JSON null diventa NA. validate() verifica la validità del JSON prima dell'analisi.
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"}') # TRUEDomande Frequenti
La lezione «Analisi di JSON con jsonlite» è gratuita?
Sì — il testo completo di «Analisi di JSON con jsonlite» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.
Cosa imparerò in «Analisi di JSON con jsonlite»?
Converta stringhe JSON in liste e data frame di R con fromJSON() Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare R Academy?
Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Analisi di JSON con jsonlite»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione R Academy?
Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Analisi di JSON con jsonlite
- Invio di richieste HTTP con httr2
- Utilizzo di API REST in R
- Gestione di strutture JSON annidate