JSON
Los valores jsn representan objetos JSON con soporte nativo para propiedades anidadas, listas y metodos utilitarios.
Declaracion
Sección titulada «Declaracion»jsn persona = { nombre: "Ana", edad: 28, activo: verdadero}Para objetos mas complejos con datos anidados:
jsn var persona = { nombre: "Ana", datos_personales: { fecha_nacimiento: "1998-05-15", dpi: "1234567890101", peso: 65.5, altura: 1.70, genero: "Femenino", nacionalidad: "Guatemalteca" }, direcciones: [ { tipo: "casa", direccion: "123 Calle Principal" }, { tipo: "trabajo", direccion: "456 Avenida Secundaria" } ], telefonos: ["555-1234", "555-5678"], activo: verdadero}Claves especiales
Sección titulada «Claves especiales»Las claves pueden contener espacios, numeros al inicio o caracteres especiales si se encierran entre comillas:
jsn datos = { nombre: "valor normal", "clave con espacios": "permitido", "123numerico": 456, "clave-con-guiones": verdadero, "clave.con.puntos": "tambien valido"}Acceso a propiedades
Sección titulada «Acceso a propiedades»Notacion de punto
Sección titulada «Notacion de punto»texto nombre = persona.nombre // "Ana"numero peso = persona.datos_personales.peso // 65.5Notacion de corchetes
Sección titulada «Notacion de corchetes»Util para claves dinamicas o claves con caracteres especiales:
texto nombre = persona["nombre"]texto especial = datos["clave con espacios"]
// Acceso dinamicotexto clave = "nombre"texto valor = persona[clave]Acceso a elementos anidados
Sección titulada «Acceso a elementos anidados»// Acceso a objetos dentro de objetostexto dpi = persona.datos_personales.dpi
// Acceso a elementos de listas dentro del JSONtexto direccion_casa = persona.direcciones[0].direcciontexto telefono_trabajo = persona.telefonos[1]
// Combinar notacionestexto ciudad = persona["direcciones"][0]["direccion"]Metodos de JSON
Sección titulada «Metodos de JSON»Verificacion de claves
Sección titulada «Verificacion de claves»| Metodo | Descripcion | Retorna |
|---|---|---|
contiene_clave(clave) | Verifica si la propiedad existe | log |
jsn persona = { nombre: "Ana", edad: 28 }
log tiene_nombre = persona.contiene_clave("nombre") // verdaderolog tiene_email = persona.contiene_clave("email") // falso
// Verificar en objetos anidadoslog tiene_dpi = persona.datos_personales.contiene_clave("dpi")Obtener claves y valores
Sección titulada «Obtener claves y valores»| Metodo | Descripcion | Retorna |
|---|---|---|
claves() | Lista de claves de primer nivel | lista<texto> |
valores() | Lista de valores de primer nivel | lista |
jsn persona = { nombre: "Ana", edad: 28, activo: verdadero}
lista<texto> claves = persona.claves()// ["nombre", "edad", "activo"]
lista valores = persona.valores()// ["Ana", 28, verdadero]Modificar propiedades
Sección titulada «Modificar propiedades»| Metodo | Descripcion |
|---|---|
establecer(clave, valor) | Asigna o crea una propiedad |
eliminar(clave) | Elimina una propiedad y devuelve su valor |
jsn var persona = { nombre: "Ana" }
// Establecer propiedades (crea si no existe)persona.establecer("apellido", "Gomez")persona.establecer("edad", 28)
// Tambien puedes usar asignacion directapersona.nombre = "Maria"persona["activo"] = verdadero
// Eliminar propiedadtexto eliminado = persona.eliminar("activo")// eliminado = verdaderoFusionar objetos
Sección titulada «Fusionar objetos»| Metodo | Descripcion |
|---|---|
fusionar(otro_json) | Combina propiedades (las existentes se sobrescriben) |
jsn var persona = { nombre: "Ana", edad: 28}
jsn datos_adicionales = { apellido: "Gomez", edad: 30, // Sobrescribira el valor existente activo: verdadero}
persona.fusionar(datos_adicionales)// persona ahora tiene: nombre, apellido, edad (30), activoSerializacion
Sección titulada «Serializacion»| Metodo | Descripcion |
|---|---|
texto() | Serializa a JSON compacto |
texto_formateado() | Serializa con indentacion legible |
jsn persona = { nombre: "Ana", edad: 28 }
texto json_compacto = persona.texto()// '{"nombre":"Ana","edad":28}'jsn persona = { nombre: "Ana", edad: 28 }
texto json_legible = persona.texto_formateado()// {// "nombre": "Ana",// "edad": 28// }Conversion desde texto
Sección titulada «Conversion desde texto»Puedes convertir una cadena JSON valida a un objeto jsn:
texto json_texto = '{"nombre":"Ana","edad":25}'jsn var persona = json_texto.jsn()
consola.mostrar(persona.nombre) // "Ana"intentar { jsn datos = "esto no es json".jsn()} capturar (excepcion error) { consola.mostrar_error("JSON invalido: " + error.mensaje)}Iterar sobre JSON
Sección titulada «Iterar sobre JSON»Usa claves() y valores() para iterar sobre propiedades:
jsn persona = { nombre: "Ana", edad: 28, ciudad: "Guatemala"}
// Iterar sobre clavespara (texto var clave en persona.claves()) { consola.mostrar(t"Clave: {clave}")}
// Iterar sobre valorespara (texto var valor en persona.valores()) { consola.mostrar(t"Valor: {valor}")}
// Iterar sobre amboslista<texto> claves = persona.claves()para (texto var clave en claves) { texto valor = persona[clave].texto() consola.mostrar(t"{clave}: {valor}")}JSON con listas
Sección titulada «JSON con listas»Los valores jsn pueden contener listas que a su vez contienen otros objetos JSON:
jsn var tienda = { nombre: "Mi Tienda", productos: [ { id: 1, nombre: "Laptop", precio: 999.99 }, { id: 2, nombre: "Mouse", precio: 29.99 }, { id: 3, nombre: "Teclado", precio: 79.99 } ]}
// Acceder a la lista de productoslista productos = tienda.productos
// Acceder a un producto especificojsn primer_producto = tienda.productos[0]texto nombre_producto = primer_producto.nombre // "Laptop"
// Agregar un nuevo productotienda.productos.agregar({ id: 4, nombre: "Monitor", precio: 299.99})Ejemplo completo
Sección titulada «Ejemplo completo»// Crear un objeto JSON con datos de usuariojsn var usuario = { id: 1, nombre: "Maria Garcia", email: "maria@ejemplo.com", perfil: { avatar: "maria.jpg", biografia: "Desarrolladora de software", redes_sociales: { github: "mariagarcia", linkedin: "maria-garcia" } }, proyectos: [ { nombre: "Proyecto A", estado: "completado" }, { nombre: "Proyecto B", estado: "en_progreso" } ]}
// Verificar y actualizar datossi (usuario.contiene_clave("email")) { consola.mostrar_exito(t"Email: {usuario.email}")}
// Agregar nueva propiedadusuario.establecer("fecha_registro", "2024-01-15")
// Modificar datos anidadosusuario.perfil.biografia = "Ingeniera de software senior"
// Agregar nuevo proyectousuario.proyectos.agregar({ nombre: "Proyecto C", estado: "planificado"})
// Mostrar JSON formateadoconsola.mostrar(usuario.texto_formateado())Buenas practicas
Sección titulada «Buenas practicas»- Declara con
varlos JSON que necesites modificar. - Usa
contiene_clave()antes de acceder a propiedades que podrian no existir. - Valida JSON externo con
intentar/capturaral parsear cadenas. - Usa
texto_formateado()para depuracion y logs legibles. - Combina con
claves()yvalores()para procesar objetos dinamicamente.