Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Hallo zusammen,
Ich verwende Application Builder, um ein Tool zur Datenanalyse mit Python-Integration zu entwickeln. Ich habe eine Schaltfläche erstellt, um die Parameterauswahl eines Benutzers zu exportieren, falls er diese zu einem späteren Zeitpunkt erneut hochladen und die gleiche Datenvorverarbeitung durchführen möchte. Derzeit exportiere ich die Parameter so, dass ich sie zuerst per Skript in eine CSV-Datei schreibe (mit Save Text File(...) ), dann kann sie als JMP-Tabelle geöffnet werden und von dort aus können die beiden Spalten (Variablen und Werte) geöffnet werden auf ein assoziatives Array eingestellt werden und ich speichere das auch als JSON-Datei zur Verwendung in einer Backend-Anwendung. Ich habe ein Bild eingefügt, wie die exportierte JMP-Tabelle aussehen könnte (für die Variablen 9 und 10 kann es je nach Auswahl eine, zwei oder drei zusätzliche Variablen geben, die Tabelle (und das assoziative Array/JSON) also nicht). immer gleich groß. Einige der Werte sind Zeichenfolgen, andere Zahlen.
Meine Frage ist, wie ich diese Parameter am besten erneut hochladen kann (vorzugsweise sowohl aus der JMP-Tabelle als auch aus der JSON-Datei), damit die Variablen richtig auf ihre Werte gesetzt werden und in späteren Berechnungen verwendet werden können. Ich habe mit For Each(...) aus den assoziativen Arrays herumgespielt, konnte die Variablen aber nicht richtig einstellen. Dies ist nicht die einfachste Möglichkeit, die Parameter zu speichern, aber ich konnte nicht herausfinden, wie ich die Variablen und Werte richtig per Skript erstellen kann, um sie direkt an eine JMP-Tabelle zu senden. Die aktuelle Methode, die ich zum Speichern von Parametern verwende, funktioniert für meine Zwecke. Wenn jedoch eine andere Methode oder eine Änderung der Struktur/des Layouts der CSV/Tabelle das Hochladen der Parameter erleichtern würde, bin ich für Vorschläge offen.
Vielen Dank für jede Hilfe.
DatenzugriffBetreff: Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Danke noch einmal, @Craige_Hales ! Das ist ein hilfreicher Beitrag. Obwohl es etwas umfangreich sein mag, sollte ich in der Lage sein, alle Tastenkombinationen aufzulisten und diese Methoden zu verwenden, damit es funktioniert.
Betreff: Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Möglicherweise können Sie den Standardwert für das assoziative Array verwenden oder explizit testen, ob der Schlüssel vorhanden ist, bevor Sie ihn verwenden.
Sehen @jthi Kommentare in Assoziatives Array: Try(), Contains() oder Standardwert?.Ist der Schlüsselsatz klein genug, um alle möglichen Kombinationen auflisten zu können? Oder handelt es sich um eine Menge, die nicht vorhergesagt werden kann und aus der Sie neue Variablen erstellen müssen?
Betreff: Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Danke für die Antwort! Ich dachte, die Assoziative-Array-Suche sei ziemlich einfach und ich habe einfach nicht die richtige Syntax ausprobiert.
Allerdings habe ich immer noch ein Problem... Für zwei meiner Variablen gibt es mehrere verschiedene Optionen (Variable1 könnte „var1option1“, „var1option2“ usw. heißen) und alle verschiedenen Optionen verfügen jeweils über eine mögliche, zwei oder drei zusätzliche Variablen, die für die Variable spezifisch sind Optionswahl. Alle diese Variablennamen sind unterschiedlich. Gibt es eine Möglichkeit, diese Parameter zu entladen, ohne vorher zu wissen, welche Auswahlmöglichkeiten bestehen?
Wie in diesem Szenario würde entweder „var1option1“ oder „var1option2“ existieren ... nicht beides, aber ich kann es vorher nicht wissen und dieses Skript müsste für alle möglichen Szenarios funktionieren. Gibt es eine Möglichkeit, Fehler zu vermeiden, wenn der Variablenname im assoziativen Array nicht vorhanden ist? Es scheint, dass ich If-Anweisungen verwenden müsste?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
Danke noch einmal!
Betreff: Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Versuchen Sie zu vermeiden, mehrere Darstellungen derselben Daten auf der Festplatte zu speichern. Da Sie bereits Python und JSON im Mix haben, würde ich JSON als Festplattenformat empfehlen. Hier sind zwei Beispiele; Beim ersten geht man davon aus, dass Sie das assoziative Array in JMP bevorzugen, beim zweiten geht man von einer Datentabelle aus. Ich tendiere zum ersten, weil die Namen besser funktionieren (unten).
// 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" )
);
Mit dem assoziativen Array sind die Suchvorgänge einfach:
type = restoredVariables["type"];
„Favoriten“
Betreff: Wie lege ich Variablen aus einer importierten JSON-Datei / einem assoziativen JMP-Array fest?Hier ist ein sehr einfaches Beispiel, um zu veranschaulichen, was ich zu tun versuche (für den Fall des assoziativen Arrays, nicht für den Fall der .json-Datei):
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]);
);
Die Protokollausgabe hierfür lautet:
// key_list[i] = {1, 2, 3};
// key_list[i] = {"a", "b", "c"};Wo mein gewünschtes Ergebnis ist (damit diese Variablen mit Python Send(...) an Python gesendet und dort verwendet werden können):
// One = {1, 2, 3};
// Two = {"a", "b", "c"};Ich habe das Gefühl, dass es fast so funktioniert, wie ich es gerne hätte, aber ich habe nicht so viel Glück!
Danke!