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 ein paar 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. 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, um eine solche AA aus einer solchen JMP-Tabelle zu konstruieren?
Vielen Dank!
DatentabelleSonstigesSkripterstellungBetreff: JSON <=> JMPDanke Craig,
Guter Hinweis für mich zu verwenden
!Contains()
Ich fing an, AAs für jede Spalte zu erstellen und Schlüssel zu erhalten, um eindeutige Werte für diese bestimmte Ebene zu erhalten, um sie zu durchlaufen, und machte es zu kompliziert. Ihre Methode ist viel einfacher.
Betreff: JSON <=> JMPWie @Thierry_S wies darauf hin, dass das JSON-Format verwendet wird Daten statt 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 )
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"}
},
"Kat2":
{
"SubCat1":{"Param1":"BA","Param2":"BC"},
"SubCat2":{"Param1":"CB","Param2":"BD"}
}
}
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 drei Spalten aufzuteilen. Entfernen Sie die Formel, damit die Beschriftungsspalte entfernt werden kann, da sie jetzt überflüssig ist.
transposed and column-izedtransponiert und spaltenweise
Betreff: JSON <=> JMPIch würde vermuten, dass es dann generische Namen wie "Column1" verwenden sollte oder, wenn dies über die GUI erfolgt, nur die Möglichkeit hat, es einzugeben.
Ich denke, es sollte eine Option haben zu sagen - alles von Ebene 1 geht in diese Spalte, alles von Ebene 2 geht in diese Spalte und so weiter ...
Betreff: JSON <=> JMPHi,
Auf den ersten Blick enthält Ihre ursprüngliche JSON-Datei keine Spaltenüberschriften, die meine JMP-JSON-Importroutine verwirren. Nur ein Gedanke.
Am besten,
TS