大家好,
我有一個使用某些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字符串,並將其轉換為數據表。
我建議跳過大部分內容,並通過open()而不是JsonToDataTable()使用json導入嚮導。 要獲取腳本,您需要:
- savetextfile(“ $ temp / x.json”,json)並使用json嚮導將其打開(在文件->打開對話框中選擇json過濾器)。 您可能會很幸運,並且能夠選擇一種猜測值。 如果不是,請選擇“巨大”,打開“堆棧”複選框,取消選中不需要的列,取消選中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 )
);