JSON <=> JMPAlle,
Ich habe eine 2-teilige Frage.
Teil 1.
Nehmen wir an, ich habe eine JSON-Datei dieser Art:
[
{
"Cat1": {
"SubCat1": {
"Param1": "AA",
"Param2": "BB"
},
"SubCat2": {
"Param1": "AB",
"Param2": "BC"
}
},
"Cat2": {
"SubCat1": {
"Param1": "BA",
"Param2": "BC"
},
"SubCat2": {
"Param1": "CB",
"Param2": "BD"
}
}
}
]Wie würde ich es in JMP importieren (mit GUI oder Skripten), um so etwas zu erhalten:

Bisher bekomme ich nur eine Reihe von Spalten und eine Zeile.
Teil 2.
Jetzt muss ich die JMP-Tabelle in eine JSON-Datei konvertieren. Nehmen wir an, ich habe eine JMP-Datei, die wie oben aussieht. Ein einfaches Speichern als JSON würde dazu führen:
[
{
"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"
}
]Was nicht gut ist.
Aber wenn ich eine AA konstruiere, die so aussieht und als JSON speichere:
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)dann bekomme ich JSON, das ich brauche.
Frage - was ist der effizienteste Weg, eine solche AA aus einer solchen JMP-Tabelle zu erstellen?
Vielen Dank!
DatentabelleSonstigesSkriptingBetreff: JSON <=> JMPHi,
Auf den ersten Blick enthält Ihre ursprüngliche JSON-Datei keine Spaltenüberschrift, die meine JMP-JSON-Importroutine verwirren. Nur ein Gedanke.
Am besten,
TS
Betreff: JSON <=> JMPIch würde vermuten, dass es dann generische Namen wie "Column1" verwenden sollte oder wenn es über die GUI gemacht wird, nur die Möglichkeit haben, es einzugeben.
Ich denke, es sollte eine Option geben zu sagen - alles von Level 1 geht in diese Spalte, alles von Level 2 geht in diese Spalte und so weiter...
Betreff: JSON <=> JMPTeil 1 Antwort
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(); Die Importtabelle enthält die Daten in einer Zeile, jedoch in den Spaltennamen codiert. Verwenden Sie nach dem Transponieren die Funktion word() in einer Spaltenformel, um den gepunkteten Namen in 3 Spalten aufzuteilen. Entfernen Sie die Formel, damit die Beschriftungsspalte entfernt werden kann, da sie jetzt überflüssig ist.
transponiert und spaltenweise
Betreff: JSON <=> JMPTeil 2, mit dt2 aus Teil 1. Erstellen Sie für jede Zeile den Schlüssel + AA, falls noch nicht geschehen, und fügen Sie dann den Schlüssel der nächsten Ebene hinzu. Dadurch wird das letzte Vorkommen einer duplizierten Zeile beibehalten.
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 ) );
{
"Kat1":
{
"SubCat1":{"Param1":"AA","Param2":"BB"},
"SubCat2":{"Param1":"AB","Param2":"BC"}
},
"Katze2":
{
"SubCat1":{"Param1":"BA","Param2":"BC"},
"SubCat2":{"Param1":"CB","Param2":"BD"}
}
}
Betreff: JSON <=> JMPAls @Thierry_S wies darauf hin, dass das JSON-Format verwendet wird Daten eher, als Namen für Schlüssel. Ihr Beispiel für das bevorzugte Save-to-json von JMP verwendet die Spalte Namen für die Schlüssel.
Pandas JSON-Formate können einen Teil der Redundanz herauspressen, und JMP kann sie lesen (aber nicht direkt schreiben). @Audrey_Shull )