Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Septiembre 10, 2019, 01:14:46 AM

Título: [Solucionado] Como se pasa de json_decode a tener 2 arrays
Publicado por: kostra en Septiembre 10, 2019, 01:14:46 AM
tengo

var res = json_decode(result);

siendo result una string en formato json que devuelve de una tabla sql con 2 columnas, las columna "nick" y la columna "sc"
y las quiero poner en 2 arrays, por ejemplo "nicktable[n]" y "sctable[n]"
Título: Re:Como se pasa de json_decode a tener 2 arrays
Publicado por: bygdle en Septiembre 10, 2019, 04:31:28 AM
Según EL MANUAL (http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/json_decode.html), la función json_decode() devuelve un mapa con una única entrada: "default".

Dentro de dicha entrada se almacena toda la información. Si el JSON es un arreglo (lo sabes porque está escrito de la forma [a, b, c, ...]), entonces la función convierte los datos en una lista; y si el JSON es un objeto (lo sabes porque está escrito de la forma {a:b, c:d, ...}), entonces la fución convierte los datos en otro mapa.

(https://www.comunidadgm.org/preguntas-y-respuestas/como-se-pasa-de-json_decode-a-tener-2-arrays/?action=dlattach;attach=18560;image)

En el caso de las consultas SQL, el JSON suele ser algo así:

[
    {
        "nick":"keponem",
        "sc":"255"
    },
    {
        "nick":"olakase",
        "sc":"78"
    },
    {
        "nick":"jejeje",
        "sc":"15"
    },
    {
        "nick":"jejejeee",
        "sc":"0"
    },
    {
        "nick":"tytyty",
        "sc":"0"
    },
    {
        "nick":"Sobako",
        "sc":"0"
    }
]


Como puedes apreciar, se trata de un arreglo "grandote" que contiene un objeto "chiquito" en cada índice, así que la función lo convertiría a algo así:

(https://www.comunidadgm.org/preguntas-y-respuestas/como-se-pasa-de-json_decode-a-tener-2-arrays/?action=dlattach;attach=18562;image)

Por tanto, si quieres recorrer todos los mapas"chiquitos" que están en  la lista "grandota", entonces primero debes acceder al mapa "grandotote":
[gml]
var res = json_decode(result); //obtener mapa grandotote
var dat = res[? "default"]; //Acceder a la llave "default"  del mapa grandotote

//En dat ahora se ha guardado la lista grandota, así que ahora vamos a recorrerla

var nicktable, sctable;
var obj;
for(var i = 0; i < ds_list_size(dat); i++) {
    obj = dat[| i]; //acceder al mapa chiquito de la lista grandota ubicado en la posición i
    //guardar cada propiedad en su respectivo arreglo
    nicktable = obj[? 'nick'];
    sctable = obj[? 'sc'];
}
[/gml]

Todo se resume en leer EL MANUAL (http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/json_decode.html), como te dije en Discord.

PD: Debes colocar en el post el ícono de la versión de GM que estás usando.
Título: Re:Como se pasa de json_decode a tener 2 arrays
Publicado por: kostra en Septiembre 10, 2019, 05:52:07 AM
no me he enterado ni explicándomelo tú con detalle, me voy a enterar con el manual xDD tas to loco xd


EDITO: RESUELTO... Mi problema (DESPUÉS DE LEER EL MANUAL) era que confundí esto: (https://i.gyazo.com/64360f9b0999b52731a44359c3c58ee0.png) con esto: (https://i.gyazo.com/24bd4cb61be4a48d6644f6362bbed3fd.png)

entonces trataba de poner "nick" donde había que poner "default"


Muchas gracias! xd