Crea una lista multidimensional partiendo de un texto en formato JSON.
Argumentos
-
json (1) Puntero a una cadena de texto en formato JSON. Es decir, una lista unidimensional de un sólo elemento cuyo índice es 0, y su valor es una cadena de texto JSON.
-
lista Lista multidimensional donde la función
jsonLstm
almacena los valores, y la estructura, del texto en formato JSON de entrada.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> cad_json[0]=$0;
> jsonLstm(cad_json, lista);
> pinta(lista);
> }'
[1][nombre] = "alfa"
[1][edad] = 34
[2][nombre] = "beta"
[2][edad] = 36
(1) Se ha decidido usar este truco para forzar que el argumento se pase por referencia, en lugar de por valor. Excepto las listas, en AWK, cualquier argumento se pasa por valor.
Obtener una cadena de texto en formato JSON, partiendo de una lista multidimensional previamente creada con la función jsonLstm
.
Argumentos
-
lista Lista Multidimensional, generada previamente con la función
jsonLstm
. -
json Puntero a una cadena de texto en formato JSON. Es decir, una lista unidimensional de un sólo elemento cuyo índice es 0, y su valor es una cadena de texto JSON. Dicha cadena de texto en formato JSON, es creada por la función
lstmJson
conservando los valores, y la estructura, de la lista multidimensional tomada como primer argumento.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> json_ent[0] = $0;
> json_sal[0] = "";
> jsonLstm(json_ent, lista);
> lstmJson(lista, json_sal);
> sangra(json_sal);
> }'
[
{
"nombre": "alfa",
"edad": 34
},
{
"nombre": "beta",
"edad": 36
}
]
Pinta por pantalla el contenido y la estructura de una lista multidimensional.
Argumentos
-
lista Lista Multidimensional, generada previamente con la función
jsonLstm
. -
frmt Cadena textual de formato. Por ejemplo:
"%s\t"
.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> cad_json[0]=$0;
> jsonLstm(cad_json, lista);
> pinta(lista, "%s\t");
> }'
alfa 34 beta 36
Devuelve el valor de un elemento localizado dentro de una lista multidimensional, generada previamente con la función jsonLstm
, en función de un filtro que lo identifica.
Argumentos
-
lista Lista Multidimensional, generada previamente con la función
jsonLstm
. -
elmnt Filtro que identifica un elemento dentro de una lista multidimensional con estructura JSON. Por ejemplo:
"1.nombre"
.
Resultado
Si el elemento existe en la lista trae
devuelve su valor y, ademas, pone RFUNC["trae"]
a 1. Si no existe, devuelve una cadena vacía ""
y, además, pone RFUNC["trae"]
a 0.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> cad_json[0]=$0;
> jsonLstm(cad_json, lista);
> print trae(lista, "[2].edad");
> }'
36
Elimina elementos de una lista multidimensional que ha sido generada previamente con la función jsonLstm
.
Argumentos
-
lista Lista Multidimensional, generada previamente con la función
jsonLstm
. -
elmnt Filtro que identifica al elemento dentro de la lista. Por ejemplo:
"2.edad"
.
Resultado
Si el elemento existe en la lista, lo elimina y devuelve su posición. Ademas, pone RFUNC["quita"]
a 1. Si no existe el elemento, devuelve 0. Además, pone RFUNC["quita"]
a 0.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> cad_json[0]=$0;
> jsonLstm(cad_json, lista);
> quita(lista, "[1].edad");
> lstmJson(lista, cad_json);
> sangra(cad_json);
> }'
[
{"nombre": "alfa"},
{
"nombre": "beta",
"edad": 36
}
]
Añade un nuevo elemento a una lista multidimencional, o modifica el valor de uno ya existente.
Argumentos
-
lista Lista Multidimensional, generada previamente con la función
jsonLstm
. -
elmnt Filtro que identifica al nuevo elemento de la lista. Por ejemplo:
"2.edad"
. -
valor Valor del nuevo elemento, o nuevo valor (si el elemento identificado por el filtro ya existe)
Resultado
Devuelve la posición del nuevo elemento, o la posición del que se haya modificado, en caso de que existiese.
Ejemplo:
$ gawk -i bbl_jdva.awk 'BEGIN{
> json[0]="";
> delete lista;
> pon(lista, "nombre", "Juan");
> pon(lista, "dirección.tipo", "Calle");
> pon(lista, "dirección.nombre", "de la Diligencia");
> pon(lista, "dirección.número", 23);
> lstmJson(lista, json);
> sangra(json);
> }'
{
"nombre": "Juan",
"dirección": {
"tipo": "Calle",
"nombre": "de la Diligencia",
"número": 23
}
}
Pinta por pantalla el texto en formato JSON que se le pasa como argumento, sangrando las líneas para facilitar su lectura.
Argumentos
- json Puntero a cadena de texto en formato JSON.
Ejemplo:
$ echo "[{\"nombre\": \"alfa\",\"edad\": 34}, {\"nombre\": \"beta\", \"edad\": 36}]" |
> gawk -i bbl_jdva.awk '{
> print $0 "\n";
> json[0]=$0;
> sangra(json);
> }'
[{"nombre": "alfa","edad": 34}, {"nombre": "beta", "edad": 36}]
[
{
"nombre": "alfa",
"edad": 34
},
{
"nombre": "beta",
"edad": 36
}
]