如何从导入的 json 文件/jmp 关联数组中设置变量?大家好,
我正在使用 Application Builder 开发一个与 Python 集成的数据分析工具。 我创建了一个按钮来导出用户的参数选择,以防他们想在以后重新上传这些参数并执行相同的数据预处理。 目前,我导出参数的方式是首先将它们编写成 csv 脚本(使用 Save Text File(...) ),然后它可以作为 jmp 表打开,从那里,两列(变量和值)可以设置为关联数组,我还将其保存为 JSON 文件以供后端应用程序使用。 我附上了导出的 jmp 表可能是什么样子的图片(对于变量 9 和 10,根据选择,可能有一个、两个或三个附加变量,因此表(和关联数组/json)不是总是一样的大小。 有些值是字符串,有些是数字。
我的问题是如何才能最好地重新上传这些参数(最好从 jmp 表和 JSON 文件),以便将变量正确设置为它们的值,并可用于以后的计算。 我一直在玩关联数组中的 For Each(...),但无法正确设置变量。 这不是保存参数的最直接方法,但我无法弄清楚如何正确编写脚本以将变量和值直接发送到 jmp 表。 我用来保存参数的当前方法适用于我的目的,但如果使用另一种方法或更改 csv/表的结构/布局会使参数的上传更容易,我愿意接受建议。
谢谢你的帮助。
脚本回复:如何从导入的 json 文件/jmp 关联数组中设置变量?再次感谢, @Craige_Hales ! 这是一个有用的帖子。 虽然它可能有点笨重,但我应该能够列出所有键的组合并使用这些方法让它工作。
回复:如何从导入的 json 文件/jmp 关联数组中设置变量?您可以使用关联数组的默认值,或者您可以在使用之前显式测试键是否存在。
看@jthi评论在关联数组:Try()、Contains() 还是默认值?.键集是否足够小,您可以列出所有可能的组合? 或者它是一个无法预测的集合,你需要从中创建新的变量?
回复:如何从导入的 json 文件/jmp 关联数组中设置变量?谢谢回复! 我认为关联数组查找非常简单,我只是没有尝试正确的语法。
我仍然有问题,但是...... 对于我的两个变量,有几个不同的选项(变量 1 可以命名为“var1option1”、“var1option2”等),并且所有不同的选项每个都有可能的一个、两个或三个附加变量特定于选项选择。 所有这些变量名称都是不同的。 有没有办法在事先不知道选择是什么的情况下卸载这些参数?
就像在这种情况下一样,要么存在“var1option1”,要么存在“var1option2”……但不能同时存在,但我无法事先知道,而且这个脚本必须适用于所有可能的场景。 当关联数组中不存在变量名时,有没有办法避免错误? 看来我必须使用 If 语句?
var1option1 = restoredVariables["var1option1"];
var1option1sub1 = restoredVariables["var1option1sub1"];
var1option1sub2 = restoredVariables["var1option1sub2"];
var1option1sub3 = restoredVariables["var1option1sub3"];
var1option2 = restoredVariables["var1option2"];
var1option2sub1 = restoredVariables["var1option2sub1"];
var1option2sub2 = restoredVariables["var1option2sub2"];
再次感谢!
回复:如何从导入的 json 文件/jmp 关联数组中设置变量?尽量避免在磁盘上保留同一数据的多种表示形式。 由于您已经混合使用 Python 和 JSON,因此我建议将 JSON 作为磁盘格式。 这里有两个例子;第一个假定您更喜欢 JMP 中的关联数组,第二个假定一个数据表。 我倾向于第一个,因为名字更好用(如下)。
// 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"];
“最爱”
回复:如何从导入的 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"};我觉得这非常接近我想要的工作方式,但我没有这样的运气!
谢谢!