Nyx con Ejemplos

Parseo de JSON

El módulo std/json provee un parser y constructor de JSON completo. Los valores JSON se representan como nodos Array etiquetados — el primer elemento es la etiqueta de tipo y el segundo es el valor — lo que facilita inspeccionar y recorrer cualquier documento JSON.

Código

// JSON con std/json: construir objetos, arrays y serializar/parsear números

import "std/json"

fn main() -> int {
    // Construir un objeto JSON programáticamente
    let keys: Array = ["name", "age", "activo"]
    let vals: Array = []
    vals.push(json_string("Alice"))
    vals.push(json_number(30))
    vals.push(json_bool(true))

    let obj: Array = json_object(keys, vals)
    let serializado: String = json_stringify(obj)
    print("Objeto: " + serializado)

    // Construir un array JSON
    let items: Array = []
    items.push(json_number(10))
    items.push(json_number(20))
    items.push(json_number(30))
    let arr: Array = json_array(items)
    print("Array:  " + json_stringify(arr))

    // Parsear un número
    let parsed: Array = json_parse("42")
    print("Tipo: " + json_type(parsed))
    let val: int = parsed[1]
    print("Valor: " + int_to_string(val))

    // Parsear un array de números
    let parsed2: Array = json_parse("[1,2,3]")
    print("Array parseado: " + json_stringify(parsed2))

    return 0
}

Salida

Objeto: {"name":"Alice","age":30,"activo":true}
Array:  [10,20,30]
Tipo: number
Valor: 42
Array parseado: [1,2,3]

Explicación

Los valores JSON se construyen con funciones constructoras tipadas: json_string, json_number, json_bool, json_object y json_array. Cada una devuelve un Array etiquetado donde node[0] es el string de tipo (p. ej. "number") y node[1] es el contenido. Esta representación uniforme hace que el recorrido recursivo sea directo.

json_stringify serializa cualquier nodo JSON de vuelta a un string compacto. json_parse hace lo inverso — acepta un string JSON y devuelve la misma estructura de array etiquetado, que luego puedes inspeccionar con json_type o indexar directamente.

Para leer campos anidados, encadenarías indexación de arrays: obj[1][1] llega al primer valor dentro de un nodo de objeto JSON. El próximo ejemplo (16) se enfoca en construir estructuras anidadas complejas para serialización.

← Anterior Siguiente →

Source: examples/by-example/15-json-parse.nx