Comment définir des variables à partir d'un fichier json importé / jmp Associative Array ?Salut tout le monde,
J'utilise Application Builder pour développer un outil d'analyse de données avec intégration Python. J'ai créé un bouton pour exporter les sélections de paramètres d'un utilisateur au cas où il souhaiterait les télécharger à nouveau ultérieurement et effectuer le même prétraitement des données. Actuellement, la façon dont j'exporte les paramètres est que je les scripte d'abord dans un csv (en utilisant Save Text File(...) ), puis il peut être ouvert en tant que table jmp et à partir de là, les deux colonnes (Variables et Values) peuvent être défini sur un tableau associatif et je l'enregistre également en tant que fichier JSON à utiliser dans une application backend. J'ai inclus une image de ce à quoi pourrait ressembler la table jmp exportée (pour les variables 9 et 10, selon la sélection, il peut y avoir une, deux ou trois variables supplémentaires, de sorte que la table (et le tableau associatif/json) ne sont pas toujours la même taille. Certaines des valeurs sont des chaînes et d'autres des nombres.
Ma question est de savoir comment puis-je télécharger au mieux ces paramètres (de préférence à la fois à partir de la table jmp et également à partir du fichier JSON) afin que les variables soient correctement définies sur leurs valeurs et puissent être utilisées dans des calculs ultérieurs. J'ai joué avec For Each(...) des tableaux associatifs, mais je n'ai pas été en mesure de définir correctement les variables. Ce n'est pas le moyen le plus simple d'enregistrer les paramètres, mais je n'ai pas pu comprendre comment obtenir les variables et les valeurs correctement scriptées pour être envoyées directement à une table jmp. La méthode actuelle que j'utilise pour enregistrer les paramètres fonctionne pour mes besoins, mais si une autre méthode ou si la modification de la structure/disposition du csv/table faciliterait le téléchargement des paramètres, je suis ouvert aux suggestions.
Merci pour toute aide.
ScriptRe : Comment définir des variables à partir d'un fichier json importé / d'un tableau associatif jmp ?Merci encore, @Craige_Hales ! C'est un poste utile. Bien que cela puisse être un peu volumineux, je devrais pouvoir répertorier toutes les combinaisons de touches et utiliser ces méthodes pour le faire fonctionner.
Re : Comment définir des variables à partir d'un fichier json importé / d'un tableau associatif jmp ?Vous pourrez peut-être utiliser la valeur par défaut pour le tableau associatif ou tester explicitement si la clé existe avant de l'utiliser.
Voir @jthi commentaires dans Tableau associatif : Try(), contains() ou valeur par défaut ?.Le jeu de clés est-il suffisamment petit pour lister toutes les combinaisons possibles ? Ou est-ce un ensemble qui ne peut pas être prédit et dont vous avez besoin pour créer de nouvelles variables ?
Re : Comment définir des variables à partir d'un fichier json importé / d'un tableau associatif jmp ?Merci pour la réponse! J'ai pensé que les recherches Associative Array étaient assez simples et je n'essayais tout simplement pas la syntaxe correcte.
J'ai toujours un problème cependant... Pour deux de mes variables, il existe plusieurs options différentes (la variable1 peut être nommée "var1option1", "var1option2", etc...) et toutes les différentes options ont chacune une, deux ou trois variables supplémentaires possibles spécifiques à la choix d'options. Tous ces noms de variables sont différents. Existe-t-il un moyen de décharger ces paramètres sans savoir au préalable quelles sont les sélections ?
Comme dans ce scénario, soit "var1option1" existerait soit "var1option2"... pas les deux, mais je n'ai aucun moyen de le savoir à l'avance et ce script devrait fonctionner pour tous les scénarios possibles. Existe-t-il un moyen d'éviter les erreurs lorsque le nom de la variable n'existe pas dans le tableau associatif ? Il semble que je devrais utiliser des déclarations If?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
Merci encore!
Re : Comment définir des variables à partir d'un fichier json importé / d'un tableau associatif jmp ?Essayez d'éviter de conserver plusieurs représentations des mêmes données sur le disque. Puisque vous avez déjà Python et JSON dans le mix, je recommanderais JSON comme format de disque. Voici deux exemples; le premier suppose que vous préférez le tableau associatif dans JMP et le second suppose une table de données. Je penche pour le premier car les noms fonctionnent mieux (ci-dessous.)
// 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" )
);
avec le tableau associatif, les recherches sont simples :
type = restoredVariables["type"];
"favoris"
Re : Comment définir des variables à partir d'un fichier json importé / d'un tableau associatif jmp ?Voici un exemple très simple pour illustrer ce que j'essaie de faire (pour le cas du tableau associatif, pas le cas du fichier .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 sortie du journal pour cela est :
// key_list[i] = {1, 2, 3};
// key_list[i] = {"a", "b", "c"};Où est mon résultat souhaité (afin que ces variables puissent être envoyées à Python avec Python Send(...) et utilisées ici):
// One = {1, 2, 3};
// Two = {"a", "b", "c"};J'ai l'impression que c'est très proche de fonctionner comme je le voudrais, mais je n'ai pas cette chance !
Merci!