インポートされたjsonファイル/jmp連想配列から変数を設定するには?こんにちは、みんな、
Application Builder を使用して、Python 統合によるデータ分析用のツールを開発しています。 後で再アップロードして同じデータの前処理を実行したい場合に備えて、ユーザーのパラメーター選択をエクスポートするボタンを作成しました。 現在、パラメーターをエクスポートする方法は、最初にそれらを csv にスクリプト化し ( Save Text File(...) を使用)、次にそれを jmp テーブルとして開き、そこから 2 つの列 (変数と値) を作成することです。連想配列に設定し、バックエンド アプリケーションで使用するために JSON ファイルとして保存します。 エクスポートされた jmp テーブルがどのように見えるかの図を含めました (変数 9 と 10 については、選択に応じて、1 つ、2 つ、または 3 つの追加の変数がある可能性があるため、テーブル (および連想配列/json) はいつも同じサイズ。 一部の値は文字列で、その他は数値です。
私の質問は、これらのパラメーターを (できれば jmp テーブルと JSON ファイルの両方から) 再アップロードして、変数が適切に値に設定され、後の計算で使用できるようにする方法です。 連想配列の For Each(...) で遊んでいますが、変数を適切に設定できませんでした。 これはパラメーターを保存する最も簡単な方法ではありませんが、変数と値を適切にスクリプト化して jmp テーブルに直接送信する方法がわかりませんでした。 パラメータを保存するために使用している現在の方法は私の目的のために機能しますが、別の方法またはcsv/テーブルの構造/レイアウトを変更するとパラメータのアップロードが簡単になる場合は、提案を受け付けています.
助けてくれてありがとう。
スクリプティングRe: インポートされたjsonファイル/jmp連想配列から変数を設定する方法は?再度、感謝します、 @Craige_Hales ! それは役立つ投稿です。 少しかさばるかもしれませんが、キーのすべての組み合わせをリストし、それらのメソッドを使用して機能させることができるはずです。
Re: インポートされたjsonファイル/jmp連想配列から変数を設定する方法は?連想配列のデフォルト値を使用できる場合もあれば、使用する前にキーが存在するかどうかを明示的にテストする場合もあります。
見る@jthiのコメント連想配列: Try()、Contains() またはデフォルト値?.キーのセットは、考えられるすべての組み合わせをリストできるほど小さいですか? それとも、予測できないセットであり、そこから新しい変数を作成する必要がありますか?
Re: インポートされたjsonファイル/jmp連想配列から変数を設定する方法は?返信いただきありがとうございます! 連想配列のルックアップは非常に単純で、正しい構文を試していないだけだと思いました。
それでも問題はありますが... 私の変数のうちの 2 つには、いくつかの異なるオプションがあり (variable1 には「var1option1」、「var1option2」などの名前を付けることができます)、すべての異なるオプションには、それぞれに固有の 1 つ、2 つ、または 3 つの追加変数があります。オプションの選択。 これらの変数名はすべて異なります。 選択内容を事前に知らずにこれらのパラメータをアンロードする方法はありますか?
このシナリオのように、「var1option1」または「var1option2」のいずれかが存在します...両方ではありませんが、事前に知る方法はなく、このスクリプトは考えられるすべてのシナリオで機能する必要があります。 変数名が連想配列に存在しない場合のエラーを回避する方法はありますか? Ifステートメントを使用する必要があるようですか?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
再度、感謝します!
Re: インポートされたjsonファイル/jmp連想配列から変数を設定する方法は?ディスク上に同じデータの複数の表現を保持しないようにしてください。 既に Python と JSON が混在しているため、ディスク形式として JSON をお勧めします。 以下に 2 つの例を示します。 1 つ目は、JMP で連想配列を使用することを想定しており、2 つ目はデータ テーブルを想定しています。 名前の方がうまく機能するので、最初のものに傾倒します(以下)。
// 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" )
);
連想配列を使用すると、ルックアップは簡単です。
type = restoredVariables["type"];
「お気に入り」
Re: インポートされたjsonファイル/jmp連想配列から変数を設定する方法は?これは、私がやろうとしていることを説明するための非常に簡単な例です (.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]);
);
このログ出力は次のとおりです。
// key_list[i] = {1, 2, 3};
// key_list[i] = {"a", "b", "c"};私の望む結果はどこにありますか(したがって、これらの変数はPython Send(...)でPythonに送信され、そこで使用できます):
// One = {1, 2, 3};
// Two = {"a", "b", "c"};これは自分が望むように動作することに非常に近いように感じますが、そのような運はありません!
ありがとう!