JSON (JavaScript Object Notation) es un formato de intercambio de datos basado en texto, fundamentado en la sintaxis de objetos de JavaScript. Se utiliza en todas partes: desde API REST y archivos de configuración hasta almacenamiento de datos en bases de datos y aplicaciones móviles. Según el sitio web oficial de JSON, el formato es independiente del lenguaje y compatible con prácticamente todas las plataformas modernas. JSON se ha convertido en el estándar de facto para la transferencia de datos entre cliente y servidor.
Puntos clave
JSON es un formato de texto para representar datos estructurados, basado en la sintaxis de JavaScript. A pesar de sus orígenes en JavaScript, el formato es completamente independiente del lenguaje — existen analizadores y serializadores para todos los lenguajes de programación populares.
La historia de JSON comenzó a principios de los años 2000, cuando Douglas Crockford extrajo un subconjunto de la sintaxis de JavaScript para el intercambio de datos. En 2013, el formato fue estandarizado como ECMA-404, y posteriormente como ISO/IEC 21778:2017. El nombre significa JavaScript Object Notation.
La principal ventaja de JSON es su sintaxis minimalista. Solo se utilizan seis tipos para describir datos: cadena, número, booleano, null, arreglo y objeto. Esto es suficiente para representar cualquier estructura de datos utilizada en aplicaciones.
La sintaxis JSON es extremadamente simple: los datos se representan como pares clave-valor, donde la clave es una cadena entre comillas dobles y el valor es uno de seis tipos básicos. Los objetos se encierran entre llaves, los arreglos entre corchetes. Las cadenas deben usar comillas dobles; las comillas simples no están permitidas.
Los números en JSON pueden ser enteros o de punto flotante, positivos o negativos, con notación exponencial. Los valores booleanos se representan con los literales true y false, y la ausencia de valor con null. Los arreglos contienen un conjunto ordenado de valores de cualquier tipo, incluidos arreglos y objetos anidados.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "soporte de anidamiento"
}
}
| Tipo | Ejemplo | Descripción |
|---|---|---|
| Cadena | “texto” |
Entre comillas dobles, con secuencias de escape |
| Número | 42 |
Entero, punto flotante, exponencial |
| Booleano | true |
true o false — sin comillas |
| null | null |
Ausencia de valor |
| Objeto | {} |
Conjunto no ordenado de pares clave-valor |
| Arreglo | [] |
Lista ordenada de valores |
JSON es el formato principal de intercambio de datos para API REST en el desarrollo móvil y web. El servidor envía JSON en el cuerpo de la respuesta, el cliente en el cuerpo de la solicitud. El encabezado Content-Type estándar para JSON es application/json.
Las API REST modernas utilizan JSON para transmitir todo tipo de datos: desde listas simples hasta estructuras anidadas complejas con relaciones entre entidades. Las bibliotecas cliente (como Axios en JavaScript o Retrofit en Android) serializan y deserializan JSON automáticamente, liberando al desarrollador del análisis manual.
Una ventaja importante de JSON en API REST es la capacidad de transferencia parcial de datos (respuesta parcial) a través de parámetros de consulta, así como el soporte de recursos anidados sin solicitudes adicionales al servidor.
El análisis JSON en plataformas móviles se realiza mediante herramientas integradas. Android usa Gson de Google o Moshi de Square, iOS usa el protocolo Codable con JSONDecoder. Cada plataforma proporciona herramientas convenientes para convertir JSON a objetos nativos y viceversa.
En Android, el enfoque popular utiliza Gson o Moshi. Simplemente defina una clase de datos con anotaciones @SerializedName y llame a fromJson para la deserialización. La biblioteca asigna automáticamente los nombres de los campos JSON a las propiedades de la clase.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
En iOS, se utiliza el protocolo integrado Codable con JSONDecoder. La estructura de datos se declara como un struct que conforma Codable, después de lo cual JSON se analiza con una sola línea. JSONEncoder realiza la serialización inversa — convierte un objeto a JSON para enviarlo al servidor.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON y XML son los dos formatos principales para transmitir datos estructurados. JSON gana en simplicidad y rendimiento, XML en rigor y validación. La elección entre ellos depende de los requisitos del proyecto: las API REST suelen usar JSON, los documentos complejos con esquemas usan XML.
XML requiere etiquetas de cierre para cada elemento, lo que aumenta el tamaño de los datos entre 2 y 3 veces en comparación con JSON. Al mismo tiempo, XML admite espacios de nombres, esquemas XSD, atributos y transformación XSLT, lo que lo hace más potente para la gestión de documentos y la integración de sistemas empresariales.
| Característica | JSON | XML |
|---|---|---|
| Sintaxis | Minimalista, clave-valor | Basada en etiquetas, apertura y cierre |
| Tamaño de datos | Compacto | 2-3 veces mayor que JSON |
| Tipos de datos | Seis tipos básicos | Solo texto, tipos mediante esquemas |
| Validación | Sin incorporada, mediante JSON Schema | XSD — estricta y madura |
| Espacios de nombres | Ninguno | Soporte completo de namespace |
| Velocidad de análisis | Alta | Menor debido a la complejidad |
Los ejemplos demuestran operaciones típicas con JSON en el desarrollo móvil: análisis de respuestas de API, creación de JSON para enviar y procesamiento de estructuras anidadas. Comprender estos patrones es esencial para cualquier desarrollador de aplicaciones móviles.
En JavaScript, JSON.stringify convierte un objeto en una cadena JSON. El segundo argumento puede ser un arreglo de claves para serialización selectiva o una función de reemplazo. El tercer argumento establece la sangría para el formato.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
En Kotlin con la biblioteca Moshi, los objetos JSON anidados se manejan mediante clases de datos anidadas. La anotación @Json especifica el nombre del campo JSON si difiere del nombre de la propiedad de la clase. Los arreglos se representan como List con el tipo de elemento.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema es un lenguaje para describir la estructura de un documento JSON, similar a XSD para XML. Usando JSON Schema, puede especificar campos obligatorios, tipos de datos, rangos de valores, patrones de cadenas y estructura anidada. La validación del esquema detecta errores de datos antes de que sean procesados en la aplicación.
JSON Schema se usa ampliamente en OpenAPI (Swagger) para documentar API REST, en formularios de validación de datos de entrada y en pruebas. El archivo del esquema en sí es un documento JSON, lo que permite que los analizadores JSON estándar lo lean. Existen validadores en línea y bibliotecas para todos los lenguajes de programación populares.
En el desarrollo móvil, JSON Schema se utiliza para validar respuestas del servidor durante las pruebas y para verificar archivos de configuración. Bibliotecas como network-validator en Android y json-schema-validator permiten incorporar la validación directamente en el proceso de desarrollo, evitando errores en etapas tempranas.
Preguntas frecuentes
JSON admite seis tipos: cadena (entre comillas dobles), número (entero y punto flotante), booleano (true/false), null, objeto (pares clave-valor en {}) y arreglo (lista de valores en []). Esto es suficiente para cualquier estructura de datos en aplicaciones.
No, el estándar JSON no admite comentarios. Si necesita comentarios, use JSON5 (JSON extendido) o agregue un campo de descripción, por ejemplo “_comment”: “explicación”. Algunas herramientas, como VS Code, admiten comentarios en archivos JSON de configuración, pero esto es una extensión no estándar.
JSONB es un formato de almacenamiento binario para JSON en PostgreSQL. A diferencia del JSON textual, JSONB se procesa más rápido, admite indexación (índices GIN) y garantiza la unicidad de las claves. Sin embargo, JSONB ocupa más espacio en disco debido a los metadatos añadidos.
Use JSONLint (jsonlint.com) para una validación rápida, el JSON.parse() incorporado en JavaScript con try-catch, o complementos del IDE. La validación incluye verificar comillas correctas, cierre de corchetes y conformidad de tipos. Para esquemas complejos, use JSON Schema Validator.
No hay límite en la especificación JSON. En la práctica, el tamaño está limitado por la memoria del dispositivo y las capacidades del analizador. Para aplicaciones móviles, se recomienda no exceder 1-2 MB por respuesta, y para datos grandes usar paginación o transmisión en flujo.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también