使用 REST API 讀取 JSON 數據
問題
一些網站提供了一個休息讀取數據的 API,通常響應是 JSON 格式的文本。 我們如何將其納入 JMP?
解決方案
這是一個使用meetup.com REST API . 它相對簡單,因為它使用常見的“GET”方法,這是網頁讀取的默認方法。 更詳細的消息使用“POST”方法,這需要不同的方法。 對於 GET 請求,輸入會附加到 URL 本身。
my key = load text file("meetupkey.txt"); // I stored my key in a text file<BR />event id = "246678392"; // the meetup id at the end of the event's URL<BR /><BR />url = "https://api.meetup.com/2/rsvps?key=" || my key || "&event_id=" || event id;
s = load text file( url ); // s contains the JSON result as a big string<BR /><BR />// We could store that in a file and then open the file, but here's a shortcut.<BR />// The Open() function can read data directly from a blob -- you just have to tell it the file type
b = char to blob(s);
dt = open(b, "JSON");<BR />// JMP interprets the JSON structured tree into a flat data table, with surprisingly good results.
討論
讀取數據後,我經常做一些清理並創建方便的列,例如:
dt << New Column("reply time", formula(:results.mtime/1000 + 01Jan1970), format("ddmonyyyy"));
dt << New Column("count", formula(if(:results.response=="yes", :results.guests + 1, 0)));
在腳本中使用它可以輕鬆地根據需要刷新我的數據。 現在我準備做一些探索..
回复:使用 REST API 讀取 JSON 數據有沒有機會把它變成教程視頻?
回复:使用 REST API 讀取 JSON 數據極好的。
我將在 JMP 腳本部分發布更多 [具體] 示例。
-布萊恩
回复:使用 REST API 讀取 JSON 數據嗨布萊恩,
非常感謝。我能夠成功地發送和接收表單,並將嘗試將其應用到我的腳本中。
乾杯,
霍華德
回复:使用 REST API 讀取 JSON 數據
嘿霍華德,
通常,當您使用“POST”HTTP 方法時,您是在“發布”-ing 表單數據。
確切的方法由 Web 服務的 RestAPI 定義,因為它們可以將“POST”、“PUT”、“GET”等解釋為暗示某些事情。 (像這樣: https://www.w3schools.com/tags/ref_httpmethods.asp )
當您使用 HTTP 請求時(如您的示例所示),查詢字符串將成為 url 的一部分(例如:
“ http://httpbin.org/post?key1=value1&key2=value2 ")
在你的例子中,如果你想發布數據,你會這樣做:
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields([[
"key1" => "value1", "key2" => "value2"
]])
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
查詢字符串被替換為表單。
Form裡面有兩個item,Fields和Files,都是Associative Arrays。
或者,您可以像這樣編寫代碼:
url = "http://httpbin.org/post";
my_fields = [=>];
for(i = 1, i <= 2, i++,
my_fields["key" || Char(i)] = "value" || Char(i);
);
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Form(
Fields(my_fields)
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
取決於您要如何為表單創建鍵/值對。
-布萊恩
回复:使用 REST API 讀取 JSON 數據我正在嘗試使用格式為 JSON 的表格數據提交 POST 請求。以下代碼以輸入作為 args 回顯 POST 請求,類似於 GET 請求。
url = "http://httpbin.org/post";
request = New HTTP Request(
URL( url ),
Method( "Post" ),
Query String(
[[
"key1" => "value1", "key2" => "value2"
]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
Write( jsl_json );
但是,我想使用 JSON 格式的數據進行 POST。以下是我如何從 Mac OSX 終端執行此操作:
curl -d '{"table1":[{"id": 1,"value1": 10,"value2": 11},{"id": 2,"value1": 20,"value2": 21}],"table2":[{"id": 3,"value1": 30,"value2": 31},{"id": 4,"value1": 40,"value2": 41}]}' -H "Content-Type: application/json" -X POST http://httpbin.org/post
我懷疑我需要替換“查詢字符串”,但文檔不清楚用什麼替換它。任何指導將不勝感激。
在此先感謝!
霍華德
回复:使用 REST API 讀取 JSON 數據涼爽的!
這比我使用的代碼更容易這裡. 在 JMP 13 中,它可以很簡單
Open( "http://api.open-notify.org/iss-now.json?r=" || Char( Random Integer( 1, 1e6 ) ), "JSON" );
International Space Station positionInternational Space Station position國際空間站位置
請注意隨機數技巧:URL 每次看起來都不一樣,因此您不會獲得舊的、陳舊的、緩存的數據副本。 末尾的 ?r= 啟動一個名為 r 的參數。 這個網站不需要任何。 如果有命名參數,例如“?time=3:00&place=space”,您可以添加網站將忽略的自己的參數名稱: "?time=3:00&place=space&r="(在這裡加上隨機數)。
在 JMP 12 中,您將獲得 JSON 字符串:“{\!”iss_position\! {\!“緯度\!”: \!"-41.6934\!", \!“經度\!”: \!"-140.2738\!"}, \!"時間戳\!": 1518704338, \"消息\!": \!“成功\!”}”