如何解析從 URL 打開的 JSON 文件?我想將一個從網上下載的 JSON 文件導入到 JMP 中。 我能夠做到這一點的最好方法是通過 GUI,手動選擇文件 --> 打開 --> 並將 URL 輸入“文件名”。 如果我從文件類型列表中選擇“JSON 數據文件 (*.json)”,JMP 將下載該文件並將解析後的數據打開到一個新的數據表中。 不幸的是,我無法編寫複製此過程的腳本。
一個簡單的打開(“網址”)命令將 URL 的 JSON 內容保存到日誌中,並且不會打開新的數據表。 我嘗試將代碼修改為:打開(“網址”,“json”) ,但這會返回一個錯誤,並且沒有收到任何數據。
我可以跑保存文本文件(“輸出路徑/文件名.json”,打開(“URL”))進而open("輸出路徑/文件名.json") JMP 會自動將文件解析為新的數據表。 此解決方法實現了我的目標,但處理時間比上一段中描述的手動文件-->打開過程要長得多。 我嘗試導入的許多 URL 都包含大量數據,因此我想盡可能縮短處理時間。
如何直接從 URL 下載 JSON 文件並在正確解析的表中打開數據?
我在 Windows 上運行 JMP 13.0.0。
回复:如何解析從 URL 打開的 JSON 文件?你好@jwebber ,
很高興聽到您能夠找到解決方案。
我的一個建議是使用 RunProgram 來執行您的 VBScript 文件,而不是使用 Open Function。
使用 RunProgram 可確保腳本在 VBScript 主機上運行,而不是依賴於計算機的 vbs 文件文件關聯(可能是文本編輯器)。
使用 RunProgram 的另一個好處是您可以使用 ReadFunction 的“文本”選項,這將暫停您的 JSL 腳本,直到 VBScript 完成。
以下是我之前在 JMP 社區分享的一些信息這裡.
您可以使用 WScript 或 CScript 可執行文件來使用 RunProgram 運行 VBScript 文件。 唯一的區別是 WScript 將在 MessageBox 中顯示錯誤,而 CScript 將錯誤寫入控制台/標準輸出。
下面是一個使用 CScript 的例子。
rp <SPAN class="token operator">=</SPAN> <SPAN class="token function">RunProgram</SPAN><SPAN class="token punctuation">(</SPAN> Executable<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"CSCRIPT.EXE"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Options<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"\!"</SPAN>C<SPAN class="token punctuation">:</SPAN>\runMe<SPAN class="token punctuation">.</SPAN>vbs\<SPAN class="token operator">!</SPAN><SPAN class="token string">""</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Read <SPAN class="token function">Function</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"text"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
回复:如何解析從 URL 打開的 JSON 文件?謝謝大家的回复。 我最終通過使用 VB 腳本從我的 URL 下載 .json 文件解決了這個問題。 使用 VBS 啟動下載比我用 JMP 找到的任何方法都快得多。
幸運的是,我仍然能夠在整個過程中使用 JSL。 我用 JSL 編寫了 VB 腳本,用 .vbs 擴展名保存了數據,然後從 JSL 發出了一個 open() 命令來執行 VB 腳本(然後下載了我的數據)。
這是我使用的代碼示例:
//define static VB script
one="dim xHttp: Set xHttp = createobject(\!"Microsoft.XMLHTTP\!")\!rdim bStrm: Set bStrm = createobject(\!"Adodb.Stream\!")\!r";
two="xHttp.Open \!"GET\!", \!"";
three="\!", False\!r";
four="xHttp.Send\!rwith bStrm\!r.type = 1\!r.open\!r.write xHttp.responseBody\!r";
five=".savetofile \!"C:\users\";
six="\desktop\data.json\!", 2\!rend with";
//define user.name
user.name="jwebber";
//define URL
url=www.somewebaddress.com;
//create full VB script
vbs=concat(one,two,url,three,four,five,user.name,six);
//save VB script
save text file("c:/users/"||user.name||"/desktop/download_data.vbs",vbs);
//open vbs file
open("c:/users/"||user.name||"/desktop/download_data.vbs");回复:如何解析從 URL 打開的 JSON 文件?顯然,我沒有仔細閱讀您的原始帖子!
您確實知道更改為 JSON 數據是可行的方法…… 我很高興您從其他回復中獲得了 JSL 等效項,聽起來我們確實需要做一些性能工作才能趕上“打開”對話框的下載時間。
約翰
回复:如何解析從 URL 打開的 JSON 文件?JMP 13.2 讓您可以更好地控製文件的打開方式。不幸的是,您可以控制這種行為並不是很明顯。你應該能夠得到你需要的東西。
如果 JMP 不知道傳入的文件擴展名,接下來我們將檢查編輯字段右側的文件類型下拉列表。 如果它有一個明確的選擇,那麼我們將假設它是所選類型的文件來打開該文件。 如果文件類型下拉選擇不明確(例如所有 JMP 文件或所有文件),我們會要求操作系統打開該文件。
所以,在你的情況下你可以試試這個:
* 粘貼網址
* 將下拉列表從“所有 JMP 文件”更改為“文本數據”或“JSON 數據文件”
* [可選] 如果您不想記住它,您可能需要取消選中“下次選擇此過濾器...”。
* 點擊確定
操作系統對話框會將文件下載到一個臨時位置,該位置的名稱很奇怪,例如 FSERXVJW,沒有擴展名。 JMP 將嘗試使用您在下拉列表中選擇的類型打開文件。
我很想知道讓對話框下載您的 json 並使用“JSON 數據文件”選項打開是否比 Open("URL","json"); 更快路線。 在那種情況下,我們可能需要做一些性能工作......
約翰
回复:如何解析從 URL 打開的 JSON 文件?很高興你收到更新。
你能貼一張桌子的照片嗎? 如果有源腳本,也將其發布。 源腳本將有一個臨時文件而不是 URL;打開始終是從從 URL 下載的文件完成的。 您應該能夠用 URL 替換臨時文件名。 當使用菜單與 JSL 時,JMP 13 可能使用不同的方法將 URL 下載到臨時文件並且可能更快。 也可能涉及緩存。
當.json 文件通過CSV 導入代碼時,.json 文件中的逗號和換行符將決定數據表的形狀。 如果 .json 文件編寫器決定放入不同的換行符,您將獲得不同的數據表。 使用 .json 導入將有助於使您的代碼對 .json 文件中的更改更加健壯。
open() 函數可能能夠使用文件擴展名來確定文件類型。 open 的額外參數將覆蓋文件擴展名,並且可能應該與 URL 一起使用,特別是如果 URL 可能有
?參數=值
附在最後。
回复:如何解析從 URL 打開的 JSON 文件?我將我的軟件更新到 v13.2,現在可以打開我的 URL 並將其正確解析為一個新的數據表,使用
open("my URL","json")執行這個命令仍然比 GUI file-->open 命令慢得多(處理時間大約是它的兩倍)。 使用 GUI 時,會彈出一個對話框,顯示文件的下載狀態,我沒有通過 open() JSL 命令收到這些信息。 甚至在我升級之前,GUI file-->open 就能夠快速打開 URL 並正確解析文件(輸出與 open("my URL",text) 不同)。 有什麼方法可以使用 JSL 精確複製文件--> 打開過程嗎? 有沒有辦法記錄執行file-->open時生成的代碼(類似於excel中記錄宏捕獲使用GUI生成的代碼的方式)?
回复:如何解析從 URL 打開的 JSON 文件?json 支持可能是在 13.0 之後添加的。 我認為你得到的文件可能相當於使用“文本”而不是“json”。
open("http://date.jsontest.com/", "text")
生成此表:
JSON data, not split up very wellJSON data, not split up very wellJSON 數據,沒有很好地拆分
在 JMP 13.2 中,使用
open("http://date.jsontest.com/","json")
我得到了一個更有用的表格:
JSON data, split into columnsJSON data, split into columnsJSON 數據,拆分成列
我認為如果您指定“文本”,您可能會從“文件”->“打開”中獲得您看到的表格。 我希望您可以升級到 13.2 並利用更好的 JSON 導入。
回复:如何解析從 URL 打開的 JSON 文件?我會努力更新我的軟件。
我仍然不確定為什麼使用 JSL,我無法複製 GUI 文件 --> 打開正確處理我的 URL 並打開新數據表的進程。 一定有某種方法可以編寫此過程的腳本,對吧?
回复:如何解析從 URL 打開的 JSON 文件?我剛剛在 JMP 13.0.0 中嘗試並複制了您看到的錯誤。 我使用的是 JMP 13.2,沒有問題。
你能更新到 13.2 並再試一次嗎? 您可以在以下位置下載更新程序jmp.com/update .
回复:如何解析從 URL 打開的 JSON 文件?謝謝你的回复,賈斯汀。 我運行了您的示例代碼並收到以下錯誤:
//:*/
open("http://date.jsontest.com/", JSON)
/*:
Unexpected "M". Perhaps there is a missing [ or {.
Line 1 Column 1: ►M",
Tried to open: http://date.jsontest.com/
Cannot open table in access or evaluation of 'Open' , Open/*###*/("http://date.jsontest.com/", JSON)
In the following script, error marked by /*###*/
Open/*###*/("http://date.jsontest.com/", JSON)我試圖將“,JSON”擴展名添加到我的 URL 並收到以下錯誤:
//:*/
open("my URL",JSON)
/*:
Unexpected "sponseTime". Perhaps there is a missing [ or {.
Line 1 Column 1: ►sponseTime":"2017-09-19T13:33:38.9224228+00:00","S
Tried to open: my URL
Cannot open table in access or evaluation of 'Open' , Open/*###*/(
"my URL",
JSON)
In the following script, error marked by /*###*/
Open/*###*/(
"my URL",
JSON)想法?
回复:如何解析從 URL 打開的 JSON 文件?您可以將“JSON”選項添加到 Open 函數以強制將 JSON 文件作為數據表打開。
Open( "http://date.jsontest.com/", JSON );
這是使用此選項與不使用此選項時日誌的比較:
open("http://date.jsontest.com/")
/*:
"{
\!"time\!": \!"01:21:07 PM\!",
\!"milliseconds_since_epoch\!": 1505827267889,
\!"date\!": \!"09-19-2017\!"
}
"
//:*/
open("http://date.jsontest.com/", JSON)
/*:
Data Table( "date.jsontest.com" )