こんにちは、みんな、
JSLを使用してAPIエンドポイントからデータを取得し、それをJMPのデータテーブルに変換するアドインがあります。 結果のデータテーブルがJSONキーをアルファベット順に並べる以外は、すべて正常に機能します。
JSONキーが順序付けられていないことは知っていますが、データテーブルの列に変換するときに元の順序を保持する方法はありますか?
ありがとう、
アンディ
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") ) );json文字列を連想配列に解析すると、並べ替えが発生します。 次に、キー「items」の下の部分を抽出し、それを別のjson文字列に変換して戻し、それをデータテーブルに変換します。
そのほとんどをスキップして、JsonToDataTable()ではなくopen()を介してjsonインポートウィザードを使用することをお勧めします。 必要なスクリプトを取得するには:
- savetextfile( "$ temp / x.json"、json)を作成し、jsonウィザードで開きます([ファイル]-> [開く]ダイアログでjsonフィルターを選択します)。 運が良ければ、推測値の1つを選択できるかもしれません。 そうでない場合は、巨大を選択し、スタックチェックボックスをオンにし、不要な列のチェックを外し、「アイテム」を除くROWSの下のすべてのチェックを外します。 それはおそらくあなたが必要とするものにかなり近いでしょう。
- 結果のテーブルからソーススクリプトを開いてコピーします。 必要に応じて、ソーススクリプトでCOLSを再配置できます。 次回はそのスクリプトを使用してください。 COLSの最初の注文は、おそらくあなたが求めているものです。
これは、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 )
);