Nyx con Ejemplos

Serialización JSON

Este ejemplo se apoya en los fundamentos de JSON de la página anterior para mostrar cómo se serializan datos del mundo real — una lista de personas — en una respuesta JSON anidada. Una función auxiliar encapsula la construcción de cada registro, manteniendo main limpio y legible.

Código

// Serializar datos a JSON con std/json: json_object, json_array, json_stringify

import "std/json"

fn build_persona(nombre: String, edad: int, activo: bool) -> Array {
    let keys: Array = ["nombre", "edad", "activo"]
    let vals: Array = []
    vals.push(json_string(nombre))
    vals.push(json_number(edad))
    vals.push(json_bool(activo))
    return json_object(keys, vals)
}

fn main() -> int {
    // Objeto simple
    let persona: Array = build_persona("Bob", 25, true)
    print(json_stringify(persona))

    // Array de objetos
    let lista: Array = []
    lista.push(build_persona("Ana", 30, true))
    lista.push(build_persona("Carlos", 40, false))
    lista.push(build_persona("Dina", 22, true))

    let arr: Array = json_array(lista)
    print(json_stringify(arr))

    // Objeto anidado
    let meta_keys: Array = ["version", "total"]
    let meta_vals: Array = []
    meta_vals.push(json_number(1))
    meta_vals.push(json_number(3))
    let meta: Array = json_object(meta_keys, meta_vals)

    let resp_keys: Array = ["meta", "data"]
    let resp_vals: Array = []
    resp_vals.push(meta)
    resp_vals.push(arr)
    let resp: Array = json_object(resp_keys, resp_vals)

    print(json_stringify(resp))

    return 0
}

Salida

{"nombre":"Bob","edad":25,"activo":true}
[{"nombre":"Ana","edad":30,"activo":true},{"nombre":"Carlos","edad":40,"activo":false},{"nombre":"Dina","edad":22,"activo":true}]
{"meta":{"version":1,"total":3},"data":[{"nombre":"Ana","edad":30,"activo":true},{"nombre":"Carlos","edad":40,"activo":false},{"nombre":"Dina","edad":22,"activo":true}]}

Explicación

build_persona es una función Nyx sencilla que recibe argumentos tipados y devuelve un nodo de objeto JSON. Envolver la lógica de construcción en una función evita desajustes entre los arrays de claves y valores, y hace que el código se documente a sí mismo — la firma de la función indica exactamente qué campos contiene cada registro.

Los arrays de objetos se construyen empujando nodos de objeto individuales dentro de un Array simple y envolviendo el resultado con json_array. Como los nodos JSON son solo arrays etiquetados, se componen de manera natural: puedes empujar un nodo de objeto como valor del campo de otro objeto para crear anidamiento tan profundo como sea necesario.

El objeto final resp envuelve meta y data en un único sobre de respuesta estilo API. Este patrón — un objeto de metadatos más un array de datos — es común en las APIs REST y muestra cómo std/json maneja formas reales de producción sin sintaxis especial.

← Anterior Siguiente →

Source: examples/by-example/16-json-serialize.nx