JSON <=> 跳轉全部,
我有一個兩部分的問題。
第1部分。
假設我有一個這樣的 JSON 文件:
[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]我如何將它導入 JMP(使用 GUI 或腳本)以獲得如下內容:

到目前為止,我只是得到一堆列和一行。
第2部分。
現在我需要將 JMP 表轉換為 JSON 文件。 假設我有一個如上所示的 JMP 文件。 簡單地將其保存為 JSON 將導致:
[
{
"Category" : "Cat1",
"SubCategory" : "SubCat1",
"Parameter" : "Param1",
"Value" : "AA"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat1",
"Parameter" : "Param2",
"Value" : "BB"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat2",
"Parameter" : "Param1",
"Value" : "AB"
},
{
"Category" : "Cat1",
"SubCategory" : "SubCat2",
"Parameter" : "Param2",
"Value" : "BC"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat1",
"Parameter" : "Param1",
"Value" : "BA"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat1",
"Parameter" : "Param2",
"Value" : "BC"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat2",
"Parameter" : "Param1",
"Value" : "CB"
},
{
"Category" : "Cat2",
"SubCategory" : "SubCat2",
"Parameter" : "Param2",
"Value" : "BD"
}
]這不好。
但是如果我構建一個看起來像這樣的 AA 並將其保存為 JSON:
AA = [
"Cat1"=> [
"SubCat1"=> [
"Param1"=> "AA",
"Param2"=> "BB"
],
"SubCat2"=> [
"Param1"=> "AB",
"Param2"=> "BC"
]
],
"Cat2"=> [
"SubCat1"=> [
"Param1"=> "BA",
"Param2"=> "BC"
],
"SubCat2"=> [
"Param1"=> "CB",
"Param2"=> "BD"
]
]
];
JSON = As JSON Expr(AA);
Save Text File("C:\Users\MyUser\JMPtoJSON\AAtoJSON.json", JSON)然後我得到我需要的 JSON。
問題 - 從這樣的 JMP 表構造 AA 的最有效方法是什麼?
謝謝!
數據表其他腳本回复:JSON <=> JMP謝謝,克雷格,
我使用的好提示
!Contains()
我開始為每一列創建 AA,並獲取鍵以獲取特定級別的唯一值以迭代它們並使其變得過於復雜。 你的方法簡單多了。
回复:JSON <=> JMP作為@Thierry_S指出,JSON格式正在使用數據而不是名字鑰匙。 您的 JMP 首選 save-to-json 示例使用列名字對於鑰匙。
Pandas JSON 格式可以擠出一些冗餘,JMP 可以讀取它們(但不能直接寫入它們。 @Audrey_Shull )
回复:JSON <=> JMP第 2 部分,使用第 1 部分中的 dt2。 對於每一行,創建鍵+AA(如果尚未創建),然後添加下一級鍵。 這將保留最後一次出現的重複行。
result = [=> ];
For( i = 1, i <= N Rows( dt2 ), i += 1,
If( !Contains( result, dt2:category[i] ),
result[dt2:category[i]] = [=> ]
);
If( !Contains( result[dt2:category[i]], dt2:SubCategory[i] ),
result[dt2:category[i]][dt2:SubCategory[i]] = [=> ]
);
result[dt2:category[i]][dt2:SubCategory[i]][dt2:Parameter[i]] = dt2:value[i];
);
Write( As JSON Expr( result ) );
{
“第一類”:
{
"SubCat1":{"Param1":"AA","Param2":"BB"},
"SubCat2":{"Param1":"AB","Param2":"BC"}
},
“第二類”:
{
"SubCat1":{"Param1":"BA","Param2":"BC"},
"SubCat2":{"Param1":"CB","Param2":"BD"}
}
}
回复:JSON <=> JMP第 1 部分答案
dt1 = Open(
Char To Blob(
"\[[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]]\"
),
json
);
dt2 = dt1 << Transpose( columns( dt1 << getcolumnnames ) ); // the 8 columns become the 8 rows
name = {"category", "SubCategory", "Parameter"}; // add these new column names
For( i = 1, i <= nitems(name), i += 1,
nc = dt2 << New Column( name[i], formula( Word( i, label, "." ) ) );
dt2 << runformulas; // run,
nc << deleteformula(); // and remove so label is no longer referenced
);
// pretty it up...
dt2:row1 << setname( "value" );
dt2 << deletecolumns( label ); // unreferenced now, and not needed
// move value to end if desired...
dt2:value << setselected; dt2 << move selected columns( to last ); dt2 << Clear Column Selection(); 導入表的數據在一行中,但已編碼到列名中。 轉置後,在列公式中使用 word() 函數將帶點的名稱拆分為 3 列。 刪除公式,以便可以刪除標籤列,因為它現在是多餘的。
transposed and column-ized轉置和列化
回复:JSON <=> JMP我猜它應該使用像“Column1”這樣的通用名稱,或者如果通過 GUI 完成,只需選擇輸入它。
我認為它應該有一個選項可以說 - 從級別 1 到此列的所有內容,從級別 2 到該列的所有內容,依此類推......
回复:JSON <=> JMP你好,
乍一看,您的原始 JSON 文件不包含任何我混淆 JMP JSON 導入例程的列標題。 只是一個想法。
最好的,
TS