Ir al contenido

Objetos JSON

Los valores jsn representan objetos JSON con soporte nativo para propiedades anidadas, listas y metodos utilitarios.

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
}

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"
}

texto nombre = persona.nombre // "Ana"
numero peso = persona.datos_personales.peso // 65.5

Util para claves dinamicas o claves con caracteres especiales:

texto nombre = persona["nombre"]
texto especial = datos["clave con espacios"]
// Acceso dinamico
texto clave = "nombre"
texto valor = persona[clave]
// Acceso a objetos dentro de objetos
texto dpi = persona.datos_personales.dpi
// Acceso a elementos de listas dentro del JSON
texto direccion_casa = persona.direcciones[0].direccion
texto telefono_trabajo = persona.telefonos[1]
// Combinar notaciones
texto ciudad = persona["direcciones"][0]["direccion"]

MetodoDescripcionRetorna
contiene_clave(clave)Verifica si la propiedad existelog
jsn persona = { nombre: "Ana", edad: 28 }
log tiene_nombre = persona.contiene_clave("nombre") // verdadero
log tiene_email = persona.contiene_clave("email") // falso
// Verificar en objetos anidados
log tiene_dpi = persona.datos_personales.contiene_clave("dpi")
MetodoDescripcionRetorna
claves()Lista de claves de primer nivellista<texto>
valores()Lista de valores de primer nivellista
jsn persona = {
nombre: "Ana",
edad: 28,
activo: verdadero
}
lista<texto> claves = persona.claves()
// ["nombre", "edad", "activo"]
lista valores = persona.valores()
// ["Ana", 28, verdadero]
MetodoDescripcion
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 directa
persona.nombre = "Maria"
persona["activo"] = verdadero
// Eliminar propiedad
texto eliminado = persona.eliminar("activo")
// eliminado = verdadero
MetodoDescripcion
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), activo
MetodoDescripcion
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}'

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)
}

Usa claves() y valores() para iterar sobre propiedades:

jsn persona = {
nombre: "Ana",
edad: 28,
ciudad: "Guatemala"
}
// Iterar sobre claves
para (texto var clave en persona.claves()) {
consola.mostrar(t"Clave: {clave}")
}
// Iterar sobre valores
para (texto var valor en persona.valores()) {
consola.mostrar(t"Valor: {valor}")
}
// Iterar sobre ambos
lista<texto> claves = persona.claves()
para (texto var clave en claves) {
texto valor = persona[clave].texto()
consola.mostrar(t"{clave}: {valor}")
}

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 productos
lista productos = tienda.productos
// Acceder a un producto especifico
jsn primer_producto = tienda.productos[0]
texto nombre_producto = primer_producto.nombre // "Laptop"
// Agregar un nuevo producto
tienda.productos.agregar({
id: 4,
nombre: "Monitor",
precio: 299.99
})

// Crear un objeto JSON con datos de usuario
jsn 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 datos
si (usuario.contiene_clave("email")) {
consola.mostrar_exito(t"Email: {usuario.email}")
}
// Agregar nueva propiedad
usuario.establecer("fecha_registro", "2024-01-15")
// Modificar datos anidados
usuario.perfil.biografia = "Ingeniera de software senior"
// Agregar nuevo proyecto
usuario.proyectos.agregar({
nombre: "Proyecto C",
estado: "planificado"
})
// Mostrar JSON formateado
consola.mostrar(usuario.texto_formateado())

  1. Declara con var los JSON que necesites modificar.
  2. Usa contiene_clave() antes de acceder a propiedades que podrian no existir.
  3. Valida JSON externo con intentar/capturar al parsear cadenas.
  4. Usa texto_formateado() para depuracion y logs legibles.
  5. Combina con claves() y valores() para procesar objetos dinamicamente.