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 correttamente, tranne per il fatto che la tabella dati risultante ordina le chiavi JSON in ordine alfabetico.
So che le chiavi JSON non sono ordinate, ma esiste un modo per preservare il loro ordine sequenziale originale quando vengono convertite in colonne della tabella 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 riordino avviene quando si analizza la stringa json in un array associativo. Quindi si estrae una parte sotto la chiave "elementi", la converte di nuovo in un'altra stringa json e la converte in una tabella di dati.
Suggerirei di saltare la maggior parte di questo e di utilizzare la procedura guidata di importazione json tramite open () anziché JsonToDataTable (). Per ottenere lo script di cui hai bisogno:
- 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 e riuscire a scegliere uno dei valori ipotizzati. In caso contrario, scegli enorme, attiva la casella di controllo della pila, deseleziona le colonne che non desideri, deseleziona tutto sotto RIGHE tranne "articoli". Probabilmente sarà abbastanza vicino a ciò di cui hai bisogno.
- apri e copia lo script sorgente dalla tabella risultante. È possibile riorganizzare il 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 utilizzando 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 )
);