Cómo construir un objeto JSON dinámicoTodo,
Me pregunto cómo construir un objeto JSON dinámico en JSL.
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);Usando el ejemplo del índice de secuencias de comandos, si quisiera cambiar el nombre de usuario de bob para decir marca y dirección de 12345 a 12346 y tengo 10 de esas llamadas, preferiría construir eso como un objeto dinámico afuera. Inicialmente me aventuré por el camino de construirlo como una matriz asociativa y luego usar As JSON Expr() , sin embargo, eso está dando como resultado un error. Mi enfoque en ese caso fue:
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;<BR /><BR />request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( As Json Expr(MyAA))
);
Por supuesto, esto no sucede en este ejemplo, sino en la API a la que intento llamar. Sin embargo, cuando paso JSON codificado como entrada, la llamada API funciona como se esperaba.

Cualquier ayuda es apreciada.
Re: Cómo construir un objeto JSON dinámicoEso fue para construirlo paso a paso, la versión completa "codificada" sería solo
factores mensuales = { {
[ "month" => 1, "month_name" => "Jan", "albedo" => 0.2, "soiling_loss" => 2.0],
[ "mes" => 2, "mes_nombre" => "febrero", "albedo" => 0,2, "pérdida_de_suciedad" => 2,0],
[ "month" => 3, "month_name" => "Mar", "albedo" => 0.2, "soiling_loss" => 2.0]
}};
je = As Expr JSON (factores mensuales);
Mostrar(je);
Como una regla de oro:
* Las matrices JSON se asignan a listas JSL (no matrices ni vectores, tenga cuidado con la similitud '[]');
* Los diccionarios JSON se asignan a matrices asociativas JSL;
* Verificación de referencias de variables no evaluadas;
* Compruebe si las llamadas de modificación de la estructura de datos realmente cambian el objeto de destino (en lugar de devolver una copia modificada).
Re: Cómo construir un objeto JSON dinámicoY no olvide que puede crear JSON simplemente concatenando cadenas en el formato JSON.
No se necesitan listas ni matrices asociativas.
Re: Cómo construir un objeto JSON dinámicoSi lo reescribo así usando Chrome Add en JSON Editor, veo una lista de matrices asociativas
[
{
"month": 1,
"month_name": "Jan",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 2,
"month_name": "Feb",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 3,
"month_name": "Mar",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 4,
"month_name": "Apr",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 5,
"month_name": "May",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 6,
"month_name": "Jun",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 7,
"month_name": "Jul",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 8,
"month_name": "Aug",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 9,
"month_name": "Sep",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 10,
"month_name": "Oct",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 11,
"month_name": "Nov",
"albedo": 0.2,
"soiling_loss": 2
},
{
"month": 12,
"month_name": "Dec",
"albedo": 0.2,
"soiling_loss": 2
}
]

Re: Cómo construir un objeto JSON dinámicoEsto parece funcionar.
ListaInterior = {};
InsertInto(innerList, [ "month" => 1, "month_name" => "Jan", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 2, "month_name" => "Feb", "albedo" => 0.2, "soiling_loss" => 2.0]);
InsertInto(innerList, [ "month" => 3, "month_name" => "Mar", "albedo" => 0.2, "soiling_loss" => 2.0]);
factoresmensuales = {listaInterior};
je = As JSON Expr(EvalList(mensualFactors));
Mostrar(je);
Creo que el verdadero problema es conocer las llamadas API correctas a la lista JSL y las estructuras de datos de matrices asociativas, y su comportamiento en cuanto a la evaluación de variables, la devolución de una copia frente a una referencia en vivo, etc. El hecho de que se utilicen para construir un objeto JSON es incidental.
Habiendo dicho eso, con el nuevo soporte para REST API de JMP, estoy de acuerdo en que sería útil tener una sesión con un ejemplo más detallado y completo. Pasaré esta sugerencia solo a nuestro equipo de doc. ¡Gracias por la sugerencia!
Re: Cómo construir un objeto JSON dinámicoah
Tuve un error de transcripción al pasar de la imagen al texto.
Re: Cómo construir un objeto JSON dinámico¿Tienes el enlace a la API. No creo que hayas enumerado JSON válido.
Al menos el Editor JSON en Chrome no lo cree así.
GraciasRe: Cómo construir un objeto JSON dinámico@nascif_jmp y @bryan_boone ,
Gracias por sus respuestas. Sus respuestas me ayudaron a llegar a alguna parte, sin embargo, tengo un par de preguntas:
1. ¿Puede proporcionarnos un ejemplo de formato de matriz JSON aceptado en JSL? ¿Es esto aceptado?

2. ¿El índice de secuencias de comandos o la guía de secuencias de comandos cubren las partes en la matriz JSON o cómo definir un objeto JSON vacío como nasicf ha mostrado amablemente?
a. Si es así, me gustaría leer eso.
b. Si no, solicitaría que esto se agregue a la documentación, porque no pude encontrarlo en ningún lado
Re: Cómo construir un objeto JSON dinámicoLa sintaxis de JavaScript/Python para las listas ("[]") no significa lo mismo en JSL. En JSL '[]' denota un vacío matriz, que no tiene una representación JSON válida, por lo que está obteniendo el '?' operador en el resultado. Eso '?' el operador, a su vez, debe ser lo que está causando el mensaje de error remoto que está recibiendo como respuesta de su servicio.
Debería usar en su lugar '{}' para indicar una lista vacía, o '[=>]' para indicar una matriz/diccionario asociativo vacío.
Siempre es una buena práctica capturar resultados intermedios y examinarlos usando show() para probar sus suposiciones.
http://wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
Re: Cómo construir un objeto JSON dinámicoPuede crear JSON "dinámico", pero tendría que agregar sus subelementos a la matriz asociativa después de que se hayan creado.
Así es como funciona JSL.
Esto muestra lo que quiero decir:
aa = [=>];
list = {};
aa["a jsl list"] = list;
Insert Into(list, "Hello World");
Insert Into(list, 2019);
show(list);
show(aa);
salidas:
list = {"Hello World", 2019};
aa = ["a jsl list" => {}];
Mientras esto:
aa = [=>];
list = {};
Insert Into(list, "Hello World");
Insert Into(list, 2019);
aa["a jsl list"] = list;
show(list);
show(aa);
Salidas:
list = {"Hello World", 2019};
aa = ["a jsl list" => {"Hello World", 2019}];
Re: Cómo construir un objeto JSON dinámicoNo he seguido este hilo en absoluto, pero vi una mención del uso de matrices asociativas y lo que parecía una confusión sobre el resultado predeterminado. Ese es el único aspecto al que estoy respondiendo.
Ver Ayuda > Libros > Guía de secuencias de comandos y busque matrices asociativas en la Tabla de contenido:
Valores predeterminados
Un valor predeterminado determina el valor de una clave que no existe en una matriz asociativa. Si usted
intente acceder a una clave que no existe en una matriz asociativa, se produce un error. Si defines un
valor predeterminado para su matriz asociativa, acceder a una clave que no existe da como resultado el
siguiente:
• agrega la clave a la matriz asociativa
• asigna el valor predeterminado a la nueva clave
• devuelve el valor (predeterminado) de la nueva clave en lugar de un error
Si construye una matriz asociativa a partir de una lista de cadenas sin asignar valores a las claves,
entonces a las claves se les asignan valores de 1. El valor predeterminado para la matriz asociativa se establece en 0.
Para establecer el valor predeterminado:
cary = Associative Array();
cary << Set Default Value( "Cary, NC" );<BR />
Para determinar si hay un valor predeterminado establecido para una matriz asociativa, use el comando <
Mensaje de valor predeterminado.
cary << Get Default Value;
"Cary, NC"
Si no hay un valor predeterminado, se devuelve Empty().
Además del mensaje Establecer valor predeterminado, se puede establecer un valor predeterminado en el constructor literal
usando => valor sin una clave.
counts = ["a" => 10,
"b" => 3,
=> 0]; // default value of 0
counts["c"] += 1;
Show( counts );
counts = ["a" => 10, "b" => 3, "c" => 1, => 0];
En la primera línea, el valor predeterminado se establece en 0. En la segunda línea, la clave "c" no existe en
cuenta En la salida, la clave "c" se crea con el valor predeterminado de 0 y luego se incrementa
por 1.
Nota: si el valor de una clave es el valor predeterminado, la clave se descarta porque cualquier clave devolverá
el valor predeterminado.
Re: Cómo construir un objeto JSON dinámico@Mark_Bailey ,
Cuando uso "[ ]" , eso da como resultado un error.
Re: Cómo construir un objeto JSON dinámicoPuede definir cualquier resultado que desee que se devuelva al hacer referencia a una clave que no tiene un valor en un par en una matriz asociativa.
Re: Cómo construir un objeto JSON dinámico¿Puedo recomendar en primer lugar que no solo copie una imagen, sino que use la funcionalidad del código JSL para que las personas puedan copiar y pegar su código?
Supongo que estás tratando de dar un vector al nombre de usuario.
Todavía no tengo que fallar con httpbin, aunque todavía está haciendo lo extraño del operador.Si usé una lista en lugar de una matriz, parece hacer lo que creo que quieres.
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = {1, 2, 3};
MyAA["address"] = "12345";
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( AsJSONExpr(myAA) )
);
data = request << Send;
¿Eso ayuda?
Re: Cómo construir un objeto JSON dinámico@vince_faller ,
Así que el problema se deriva de esto:

Si la matriz asociativa tiene una clave sin valor, luego de usar As JSON Expr(), se traduce a este operador extraño (?) Que no es algo que pueda analizarse correctamente, lo que a su vez genera un error. En mi caso, acabo de soltar la clave de mi matriz asociativa y funcionó, sin embargo, tengo curiosidad por saber cuál es la forma correcta de pasar dicho parámetro.
Re: Cómo construir un objeto JSON dinámico@vince_faller ,
Como algunos de los parámetros no son algo que pueda compartir aquí, te lo envié como un mensaje privado. Verá en el mensaje que el ejemplo codificado y As JSON Expr() tienen los mismos parámetros, los valores son dinámicos, pero da como resultado un error como lo mostré anteriormente.
Re: Cómo construir un objeto JSON dinámico¿Ha confirmado que su AS JSON Expr () es el mismo que su codificado?
La construcción del objeto JSON parece estar funcionando.
Names default to here(1);
MyAA = Associative Array();
MyAA["username"] = "bob" ;
MyAA["address"] = "12345" ;
myAA["aa"] = associative array();
myAA["aa"]["thing1"] = 14;
myAA["aa"]["thing2"] = 28;
show( As JSON Expr(myAA));