Hallo zusammen,
Ich habe ein Add-In, das JSL verwendet, um Daten von einem API-Endpunkt abzurufen und in eine Datentabelle in JMP umzuwandeln. Alles funktioniert einwandfrei, außer dass die resultierende Datentabelle die JSON-Schlüssel alphabetisch sortiert.
Ich weiß, dass JSON-Schlüssel ungeordnet sind, aber gibt es eine Möglichkeit, ihre ursprüngliche Reihenfolge beizubehalten, wenn sie in Datentabellenspalten konvertiert werden?
Vielen Dank,
Andy
request = New HTTP Request(
URL( "https://xyz.com/api" ),
Method( "Get" ),
Query String(
[["token" => "abcdefg"]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
dt = JSON To Data Table( As JSON Expr( jsl_json["items"], Guess("wide") ) );Die Neuordnung erfolgt, wenn Sie den JSON-String in ein assoziatives Array analysieren. Anschließend extrahieren Sie einen Teil unter dem Schlüssel "items", konvertieren ihn zurück in eine andere JSON-Zeichenfolge und konvertieren diesen in eine Datentabelle.
Ich würde vorschlagen, das meiste davon zu überspringen und den json-Importassistenten über open () anstelle von JsonToDataTable () zu verwenden. Um das Skript zu erhalten, benötigen Sie:
- savetextfile ("$ temp / x.json", json) und öffnen Sie es mit dem json-Assistenten (wählen Sie den json-Filter im Dialogfeld Datei-> Öffnen). Möglicherweise haben Sie Glück und können einen der Schätzwerte auswählen. Wenn nicht, wählen Sie "Groß", aktivieren Sie das Kontrollkästchen "Stapel", deaktivieren Sie die nicht gewünschten Spalten und deaktivieren Sie alles unter "Zeilen" außer "Elemente". Das wird wahrscheinlich ziemlich nah an dem sein, was Sie brauchen.
- Öffnen Sie das Quellenskript und kopieren Sie es aus der resultierenden Tabelle. Sie können die COLS im Quellenskript nach Bedarf neu anordnen. Verwenden Sie dieses Skript beim nächsten Mal. Die Erstbestellung von COLS ist wahrscheinlich das, wonach Sie fragen.
Hier ist ein Beispiel, das die temporäre Datei mithilfe eines Blobs vermeidet.
request = New HTTP Request( URL( "http://api.open-notify.org/iss-now.json" ), Method( "Get" ), Query String( [["token" => "abcdefg"]] ) );
jsontext = request << send; // not scrambled yet
jsonblob = Char To Blob( jsontext );
Open(jsonblob,
JSON Settings(
Stack( 0 ),
Row( "/root" ),
Col( "/root/timestamp", Column Name( "timestamp" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/iss_position/longitude", Column Name( "longitude" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/iss_position/latitude", Column Name( "latitude" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/message", Column Name( "message" ), Fill( "Use Once" ), Type( "Character" ), Format( {"Best"} ), Modeling Type( "Continuous" ) )
),
jsonwizard( 0 )
);