Ciao a tutti,
Ho un componente aggiuntivo che utilizza alcuni JSL per recuperare i dati da un endpoint API e trasformarli in una tabella di dati in JMP. Tutto funziona bene, tranne per il fatto che la tabella di dati risultante ordina le chiavi JSON in ordine alfabetico.
So che le chiavi JSON non sono ordinate, ma c'è un modo per preservare il loro ordine sequenziale originale quando vengono convertite in colonne della tabella di dati?
Grazie,
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") ) );Il riordinamento avviene quando si analizza la stringa json in un array associativo. Quindi estrai una parte sotto la chiave "items", la riconverti in un'altra stringa json e la converti in una tabella di dati.
Suggerirei di saltare la maggior parte di ciò e di utilizzare la procedura guidata di importazione json tramite open() anziché JsonToDataTable(). Per ottenere lo script è necessario:
- savetextfile("$temp/x.json",json) e aprilo con la procedura guidata json (scegli il filtro json nella finestra di dialogo file->apri). Potresti essere fortunato ed essere in grado di scegliere uno dei valori ipotizzati. In caso contrario, scegli enorme, attiva la casella di controllo dello stack, deseleziona le colonne che non desideri, deseleziona tutto in RIGHE tranne "articoli". Probabilmente sarà abbastanza vicino a ciò di cui hai bisogno.
- apri e copia lo script di origine dalla tabella risultante. È possibile riorganizzare i COLS nello script di origine secondo necessità. Usa quello script la prossima volta. L'ordine iniziale di COLS è probabilmente quello che stai chiedendo.
Ecco un esempio che evita il file temporaneo usando un BLOB.
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 )
);