¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?Hola todos,
Estoy usando Application Builder para desarrollar una herramienta de análisis de datos con integración de Python. Creé un botón para exportar las selecciones de parámetros de un usuario en caso de que deseen volver a cargarlas más adelante y realizar el mismo preprocesamiento de datos. Actualmente, la forma en que exporto los parámetros es primero escribirlos en un csv (usando Guardar archivo de texto (...)), luego se puede abrir como una tabla jmp y desde allí, las dos columnas (Variables y Valores) pueden configurarse en una matriz asociativa y también lo guardo como un archivo JSON para usarlo en una aplicación de back-end. He incluido una imagen de cómo se vería la tabla jmp exportada (para las Variables 9 y 10, según la selección, puede haber una, dos o tres variables adicionales, por lo que la tabla (y la matriz asociativa/json) no son siempre del mismo tamaño. Algunos de los valores son cadenas y otros son números.
Mi pregunta es cuál es la mejor manera de volver a cargar estos parámetros (preferiblemente desde la tabla jmp y también desde el archivo JSON) para que las variables se establezcan correctamente en sus valores y se puedan usar en cálculos posteriores. He estado jugando con For Each(...) de las matrices asociativas, pero no he podido establecer las variables correctamente. Esta no es la forma más sencilla de guardar los parámetros, pero no pude averiguar cómo obtener las variables y los valores correctamente escritos para enviarlos directamente a una tabla jmp. El método actual que estoy usando para guardar parámetros funciona para mis propósitos, pero si otro método o si cambiar la estructura/diseño del csv/tabla facilitaría la carga de los parámetros, estoy abierto a sugerencias.
Gracias por cualquier ayuda.
secuencias de comandosRe: ¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?Aquí hay un ejemplo muy simple para ilustrar lo que estoy tratando de hacer (para el caso de la matriz asociativa, no para el caso del archivo .json):
AA = Associative Array();
AA["One"] = {1, 2, 3};
AA["Two"] = {"a", "b", "c"};
key_list = AA << Get Keys();
val_list = AA << Get Values();
For(i=1, i<=N Items(key_list), i++,
key_list[i] = val_list[i];
Show(key_list[i]);
);
La salida del registro para esto es:
// key_list[i] = {1, 2, 3};
// key_list[i] = {"a", "b", "c"};Dónde está mi resultado deseado (para que estas variables se puedan enviar a Python con Python Send (...) y usarse allí):
// One = {1, 2, 3};
// Two = {"a", "b", "c"};Siento que esto está muy cerca de funcionar como me gustaría, ¡pero no tengo tanta suerte!
¡Gracias!
Re: ¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?Intente evitar mantener múltiples representaciones de los mismos datos en el disco. Dado que ya tiene Python y JSON en la combinación, recomendaría JSON como formato de disco. Aquí hay dos ejemplos; el primero asume que prefiere la matriz asociativa en JMP y el segundo asume una tabla de datos. Me inclino por el primero porque los nombres funcionan mejor (abajo).
// 1st example using Associative Array
variables = ["nThings" => 3,
"type" => "favs",
"things" => {"raindrops", "whiskers", "kettles"}];
filename = Save Text File( "$temp/variables.json", As JSON Expr( variables ) );
restoredVariables = Parse JSON( Load Text File( filename ) );
// this is not needed unless you want to compare the restored data to the original...
If( variables == restoredVariables,
Write( "\!nGood restore\!n" ),
Write( "\!nRestore does not match\!n" )
);
Show( variables, restoredVariables );
// 2nd example, using data table
dt = New Table( "variables",
New Column( "key", "character", values( variables << getkeys ) ),
New Column( "val", "expression", values( variables << getvalues ) )
);
dt << save( "$temp/table.json" );
dtRestored = Open( "$temp/table.json" );
dtRestored:val << datatype( "expression" );
// this is not needed, unless you want to compare the restored table to the original...
ok = (dt << Compare Data Tables( showwindow( 0 ), Unlink All, Link( {"key", "key"} ), Link( {"val", "val"} ) )) << Compare with( dtRestored );
Write( "\!n\!nData table on disk:\!n", Load Text File( "$temp/table.json" ) );
If( ok,
Write( "\!ntables match" ),
Write( "\!nhmmm, tables are different" )
);
con la matriz asociativa las búsquedas son simples:
type = restoredVariables["type"];
"favoritos"
Re: ¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?¡Gracias por la respuesta! Pensé que las búsquedas de matriz asociativa eran bastante simples y simplemente no estaba intentando la sintaxis correcta.
Todavía tengo un problema, sin embargo... Para dos de mis variables, hay varias opciones diferentes (variable1 podría llamarse "var1option1", "var1option2", etc...) y cada una de las diferentes opciones tiene una, dos o tres posibles variables adicionales específicas para el elección de opción. Todos estos nombres de variables son diferentes. ¿Hay alguna forma de descargar estos parámetros sin saber de antemano cuáles son las selecciones?
Como en este escenario, existiría "var1option1" o "var1option2"... no ambos, pero no hay forma de saberlo de antemano y este script tendría que funcionar para todos los escenarios posibles. ¿Hay alguna forma de evitar errores cuando el nombre de la variable no existe en la matriz asociativa? Parece que tendría que usar declaraciones If?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
¡Gracias de nuevo!
Re: ¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?Es posible que pueda usar el valor predeterminado para la matriz asociativa, o puede probar explícitamente si la clave existe antes de usarla.
Ver @jthi comentarios en Matriz asociativa: Try (), Contiene () o valor predeterminado?.¿Es el juego de llaves lo suficientemente pequeño como para enumerar todas las combinaciones posibles? ¿O es un conjunto que no se puede predecir y necesita crear nuevas variables?
Re: ¿Cómo establecer variables desde un archivo json importado/matriz asociativa jmp?Gracias de nuevo, @Craige_Hales ! Esa es una publicación útil. Aunque puede ser un poco voluminoso, debería poder enumerar todas las combinaciones de teclas y usar esos métodos para que funcione.