如何解析从 URL 打开的 JSON 文件?我想将一个 JSON 文件导入从网络下载的 JMP。 我能够做到这一点的最好方法是通过 GUI,手动选择文件 --> 打开 --> 并将 URL 输入到“文件名”中。 如果我从文件类型列表中选择“JSON 数据文件 (*.json)”,JMP 将下载该文件并将解析的数据打开到一个新的数据表中。 不幸的是,我无法编写复制此过程的脚本。
一个简单的打开(“网址”)命令将 URL 的 JSON 内容保存到日志中,并且不会打开新的数据表。 我尝试将代码修改为:打开(“网址”,“json”) ,但这会返回错误并且没有接收到数据。
我可以跑保存文本文件("输出路径/文件名.json",open("URL"))接着open("输出路径/文件名.json") JMP 会自动将文件解析为新的数据表。 这种解决方法实现了我的目标,但处理时间比上一段中描述的手动文件-->打开过程要长得多。 我尝试导入的许多 URL 都包含大量数据,因此我希望尽可能减少处理时间。
如何直接从 URL 下载 JSON 文件并在正确解析的表中打开数据?
我在 Windows 上运行 JMP 13.0.0。
Re: 如何解析从 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>
Re: 如何解析从 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");Re: 如何解析从 URL 打开的 JSON 文件?显然,我没有仔细阅读您的原始帖子!
您确实知道更改为 JSON 数据是可行的方法...... 我很高兴您从其他回复中获得了等效的 JSL,听起来我们确实需要做一些性能工作来赶上“打开”对话框的下载时间。
约翰
Re: 如何解析从 URL 打开的 JSON 文件?JMP 13.2 让您可以更好地控制文件的打开方式。不幸的是,你可以控制这种行为并不是很明显。你应该能够得到你需要的东西。
如果 JMP 不知道传入的文件扩展名,接下来我们将检查编辑字段右侧的文件类型下拉菜单。 如果它有一个明确的选择,那么我们将打开该文件,假设它是所选类型的文件。 如果文件类型下拉选择不明确(例如,所有 JMP 文件或所有文件),我们会要求操作系统打开文件。
所以,在你的情况下,你可以试试这个:
* 粘贴网址
* 将下拉菜单从“所有 JMP 文件”更改为“文本数据”或“JSON 数据文件”
* [可选] 如果您不想记住它,您可能需要取消选中“下次选择此过滤器...”。
* 点击确定
操作系统对话框会将文件下载到一个临时位置,该位置具有疯狂的名称,例如没有扩展名的 FSERXVJW。 JMP 将尝试使用您在下拉菜单中选择的类型打开文件。
我很想知道让对话框下载您的 json 并使用“JSON 数据文件”选项打开是否比 Open("URL","json");路线。 在这种情况下,我们可能需要完成一些工作......
约翰
Re: 如何解析从 URL 打开的 JSON 文件?很高兴你得到了更新。
可以发一张桌子的照片吗? 如果有源脚本,也发布。 源脚本将有一个临时文件而不是 URL;打开总是从从 URL 下载的文件完成。 您应该能够用 URL 替换临时文件名。 当使用菜单与 JSL 时,JMP 13 可能使用不同的方法将 URL 下载到临时文件,并且可能更快。 也可能涉及缓存。
当 .json 文件通过 CSV 导入代码时,.json 文件中的逗号和换行符将确定数据表的形状。 如果 .json 文件编写器决定放入不同的换行符,您将获得不同的数据表。 使用 .json 导入将有助于使您的代码对 .json 文件中的更改更加健壮。
open() 函数可能能够使用文件扩展名来确定文件类型。 open 的额外参数将覆盖文件扩展名,并且可能应该与 URL 一起使用,特别是如果 URL 可能包含
?参数=值
附加到最后。
Re: 如何解析从 URL 打开的 JSON 文件?我将软件更新到 v13.2,现在可以打开我的 URL 并将其正确解析为新的数据表
open("my URL","json")执行这个命令仍然比 GUI 文件-->open 命令慢很多(处理时间大约是两倍)。 使用 GUI 时,会弹出一个对话框,显示文件的下载状态,我没有使用 open() JSL 命令收到的信息。 甚至在我升级之前,GUI file-->open 就能够快速打开 URL 并正确解析文件(输出与 open("my URL",text) 不同)。 有什么方法可以准确地复制文件——>使用JSL打开进程? 有没有办法记录执行file-->open时生成的代码(类似于在excel中记录宏捕获使用GUI生成的代码的方式)?
Re: 如何解析从 URL 打开的 JSON 文件?json 支持可能是在 13.0 之后添加的。 我认为你得到的文件可能相当于使用“文本”而不是“json”。
open("http://date.jsontest.com/", "text")
生成此表:
JSON data, not split up very wellJSON 数据,没有很好地拆分
在 JMP 13.2 中,使用
open("http://date.jsontest.com/","json")
我得到一个更有用的表:
JSON data, split into columnsJSON 数据,分列
我认为如果您指定“文本”,您可能会从 File->Open 中获得您看到的表格。 我希望您可以升级到 13.2 并利用更好的 JSON 导入。
Re: 如何解析从 URL 打开的 JSON 文件?我会努力更新我的软件。
我仍然不确定为什么,使用 JSL,我无法复制 GUI 文件——>正确处理我的 URL 并打开新数据表的打开进程。 必须有某种方法来编写此过程的脚本,对吧?
Re: 如何解析从 URL 打开的 JSON 文件?我刚刚在 JMP 13.0.0 中尝试过并复制了您看到的错误。 我正在使用 JMP 13.2,没有问题。
你能更新到 13.2 再试一次吗? 您可以在以下位置下载更新程序jmp.com/update .
Re: 如何解析从 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)想法?
Re: 如何解析从 URL 打开的 JSON 文件?您可以在 Open 函数中添加“JSON”选项,以强制将 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" )