如何解析从 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 文件?您可以在 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" )