Salut tout le monde,
J'ai un complément qui utilise du JSL pour récupérer des données à partir d'un point de terminaison d'API et les transformer en une table de données dans JMP. Tout fonctionne bien, sauf que la table de données résultante classe les clés JSON par ordre alphabétique.
Je sais que les clés JSON ne sont pas ordonnées, mais existe-t-il un moyen de conserver leur ordre séquentiel d'origine lorsqu'elles sont converties en colonnes de table de données ?
Merci,
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") ) );La réorganisation se produit lorsque vous analysez la chaîne json dans un tableau associatif. Vous extrayez ensuite une partie sous la clé "items", la reconvertissez en une autre chaîne json et la convertissez en une table de données.
Je suggérerais de sauter la plupart de cela et d'utiliser l'assistant d'importation json via open() plutôt que JsonToDataTable(). Pour obtenir le script dont vous avez besoin :
- savetextfile("$temp/x.json",json) et ouvrez-le avec l'assistant json (choisissez le filtre json dans la boîte de dialogue file->open). Vous pourriez avoir de la chance et être en mesure de choisir l'une des valeurs de supposition. Sinon, choisissez énorme, activez la case à cocher pile, décochez les colonnes que vous ne voulez pas, décochez tout sous ROWS sauf "items". Ce sera probablement assez proche de ce dont vous avez besoin.
- ouvrez et copiez le script source à partir de la table résultante. Vous pouvez réorganiser les COLS dans le script source selon vos besoins. Utilisez ce script la prochaine fois. La commande initiale de COLS est probablement ce que vous demandez.
Voici un exemple qui évite le fichier temporaire en utilisant 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 )
);