こんにちは、みんな、
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 つを選択できる場合があります。 そうでない場合は、巨大を選択し、スタックチェックボックスをオンにし、不要な列のチェックを外し、「アイテム」以外の行の下のすべてのチェックを外します。 それはおそらくあなたが必要とするものにかなり近いでしょう。
- 結果のテーブルからソース スクリプトを開いてコピーします。 必要に応じて、ソース スクリプト内の 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 )
);