Hola a todos,
Tengo un complemento que usa algo de JSL para recuperar datos de un punto final de API y convertirlo en una tabla de datos en JMP. Todo funciona bien, excepto que la tabla de datos resultante ordena las claves JSON alfabéticamente.
Sé que las claves JSON no están ordenadas, pero ¿hay alguna forma de conservar su orden secuencial original cuando se convierten en columnas de la tabla de datos?
Gracias,
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") ) );El reordenamiento ocurre cuando analiza la cadena json en una matriz asociativa. Luego extrae una parte debajo de la clave "elementos", la convierte de nuevo en otra cadena json y la convierte en una tabla de datos.
Sugeriría omitir la mayor parte de eso y usar el asistente de importación json a través de open () en lugar de JsonToDataTable (). Para obtener el script necesita:
- savetextfile ("$ temp / x.json", json) y ábralo con el asistente json (elija el filtro json en el archivo-> diálogo abierto). Es posible que tenga suerte y pueda elegir uno de los valores de conjetura. Si no es así, elija enorme, active la casilla de verificación de la pila, desmarque las columnas que no desee, desmarque todo en FILAS excepto los "elementos". Probablemente se acerque bastante a lo que necesita.
- abra y copie el script fuente de la tabla resultante. Puede reorganizar los COLS en el script de origen según sea necesario. Use ese guión la próxima vez. El pedido inicial de COLS es probablemente lo que está pidiendo.
Aquí hay un ejemplo que evita el archivo temporal mediante el uso de 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 )
);