Ejemplos de JSON en 7 lenguajes: JavaScript, Python, Go, Rust, PHP, Java, C#
JSON es universal, pero cada lenguaje lo gestiona de forma distinta. Esta es una referencia comparativa para analizar, serializar y gestionar errores en siete lenguajes populares.
JavaScript
JavaScript es el hogar nativo de JSON. Analiza con JSON.parse, serializa con JSON.stringify y envuelve siempre el análisis en un try/catch.
// 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 automaticallyPython
El módulo json integrado de Python mapea los objetos JSON a dicts y los arrays a listas. Usa json.loads (cadena → objeto) y json.dumps (objeto → cadena).
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
El paquete encoding/json de Go mapea JSON a structs mediante etiquetas. Usa json.Marshal para serializar y json.Unmarshal para analizar, con etiquetas de struct que controlan los nombres de los campos.
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 usa los crates serde y serde_json para (de)serialización de coste cero y con seguridad de tipos. Deriva Serialize/Deserialize en un struct y serde_json se encarga del resto — incluidos mensajes de error precisos con línea y columna cuando falla el análisis.
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 tiene json_encode/json_decode nativo, sin dependencias. Pasa true como segundo argumento a json_decode para obtener arrays asociativos en lugar de objetos stdClass, y comprueba siempre json_last_error() — json_decode devuelve null en caso de error, que también es un valor JSON válido.
<?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 normalmente usa el ObjectMapper de Jackson. Los records (Java 16+) crean DTO limpios sin boilerplate — Jackson se enlaza a ellos directamente, incluida la gestión de propiedades desconocidas mediante configure.
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#
El C# moderno usa System.Text.Json (integrado en .NET). Los atributos como JsonPropertyName mapean las convenciones de nombres de JSON a propiedades PascalCase, y JsonSerializerOptions controla el formato de salida.
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);Buenas prácticas universales
Gestiona siempre los errores de análisis: el JSON mal formado hará que el código sin protección falle. Para las APIs en producción, valida contra un JSON Schema antes de procesar. Prefiere structs/clases tipadas en lugar de mapas genéricos en los lenguajes compilados. Usa pretty-print durante el desarrollo y minifica en producción.
FAQ
- ¿Qué lenguaje tiene el parser de JSON más rápido?
- Los lenguajes compilados (Go, Rust, Java con Jackson, C# con System.Text.Json) generalmente superan a los interpretados. Para la mayoría de las aplicaciones, la diferencia es insignificante en comparación con los costes de red y de base de datos.
- ¿Debo usar un struct tipado o un mapa genérico?
- Los structs/clases tipadas detectan las discrepancias de esquema en tiempo de compilación y te dan autocompletado. Usa mapas genéricos solo cuando la forma sea realmente dinámica o desconocida.
Artículos relacionados
¿Qué es JSON? Una guía completa para principiantes →
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, fácil de leer para los humanos y de analizar para las máquinas. Aprende la sintaxis, los tipos de datos y la estructura que impulsan las APIs modernas.
La historia de JSON: del 2000 al estándar de la industria →
Recorre JSON desde la idea de Douglas Crockford en 2001, pasando por su adopción por Yahoo, hasta convertirse en el estándar ECMA-404 que impulsa el 90 % de las APIs modernas.
La guía completa de JSON Schema (Draft 7) →
JSON Schema es el estándar para describir y validar la estructura de JSON. Aprende las palabras clave principales, crea un esquema de API real y aplica buenas prácticas.