URL에서 열린 JSON 파일을 구문 분석하는 방법은 무엇입니까?웹에서 다운로드한 JSON 파일을 JMP로 가져오고 싶습니다. 이 작업을 수행할 수 있었던 가장 좋은 방법은 GUI를 통해 파일 --> 열기 -->를 수동으로 선택하고 "파일 이름"에 URL을 입력하는 것입니다. 파일 형식 목록에서 "JSON 데이터 파일(*.json)"을 선택하면 JMP가 파일을 다운로드하고 구문 분석된 데이터를 새 데이터 테이블로 엽니다. 불행히도 저는 이 프로세스를 복제하는 스크립트를 작성할 수 없었습니다.
간단한 열기("URL") 명령은 URL의 JSON 콘텐츠를 로그에 저장하고 새 데이터 테이블을 열지 않습니다. 코드를 다음과 같이 수정해 보았습니다. 열기("URL","json") , 그러나 이것은 오류를 반환하고 데이터가 수신되지 않습니다.
나는 뛸 수 있습니다 텍스트 파일 저장("출력 경로/파일 이름.json",open("URL")) 그런 다음 open("출력 경로/파일명.json") JMP는 자동으로 파일을 새 데이터 테이블로 구문 분석합니다. 이 해결 방법은 내 목표를 달성하지만 처리 시간이 이전 단락에서 설명한 수동 파일->열기 프로세스보다 훨씬 더 깁니다. 가져오려는 많은 URL에 많은 양의 데이터가 포함되어 있으므로 처리 시간을 최대한 최소화하고 싶습니다.
URL에서 직접 JSON 파일을 다운로드하고 올바르게 구문 분석된 테이블에서 데이터를 열려면 어떻게 해야 합니까?
Windows에서 JMP 13.0.0을 실행하고 있습니다.
Re: URL에서 열린 JSON 파일을 어떻게 파싱합니까?안녕 @jwebber ,
해결책을 찾으셨다니 다행입니다.
한 가지 제안은 RunProgram을 사용하여 Open Function을 사용하는 대신 VBScript 파일을 실행하는 것입니다.
RunProgram을 사용하면 스크립트가 vbs 파일(잠재적으로 텍스트 편집기일 수 있음)에 대한 컴퓨터의 파일 연결에 의존하는 대신 VBScript 호스트에서 실행됩니다.
RunProgram 사용의 또 다른 이점은 VBScript가 완료될 때까지 JSL 스크립트를 일시 중지하는 ReadFunction에 "텍스트" 옵션을 사용할 수 있다는 것입니다.
다음은 이전에 JMP 커뮤니티에서 공유한 정보입니다. 여기 .
WScript 또는 CScript 실행 파일을 사용하여 RunProgram을 사용하여 VBScript 파일을 실행할 수 있습니다. 유일한 차이점은 WScript는 MessageBox에 오류를 표시하는 반면 CScript는 콘솔/stdout에 오류를 기록한다는 것입니다.
다음은 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 파일 또는 모든 파일) 파일을 열도록 OS에 요청합니다.
따라서 귀하의 경우 다음을 시도해 볼 수 있습니다.
* URL 붙여넣기
* 드롭다운을 "모든 JMP 파일"에서 "텍스트 데이터" 또는 "JSON 데이터 파일"로 변경
* [선택 사항] "다음에 이 필터 선택..."을 기억하지 않으려면 선택을 취소할 수 있습니다.
* 확인을 클릭
OS 대화 상자는 확장명이 없는 FSERXVJW와 같은 미친 이름을 가진 임시 위치에 파일을 다운로드합니다. JMP는 드롭다운에서 선택한 종류의 파일을 열려고 시도합니다.
대화 상자에서 json을 다운로드하고 "JSON 데이터 파일" 선택으로 여는 것이 Open("URL","json"); 노선. 그런 경우에 우리가 해야 할 일이 있을지도 모릅니다...
남자
Re: URL에서 열린 JSON 파일을 어떻게 파싱합니까?업데이트를 받으셨다니 다행입니다.
테이블 사진 올려주실 수 있나요? 소스 스크립트가 있으면 그것도 게시하십시오. 소스 스크립트에는 URL이 아닌 임시 파일이 있습니다. 열기는 항상 URL에서 다운로드한 파일에서 수행됩니다. 임시 파일 이름을 URL로 바꿀 수 있어야 합니다. 메뉴와 JSL을 사용할 때 JMP 13에서 다른 방법을 사용하여 URL을 임시 파일로 다운로드할 수 있으며 더 빠를 수 있습니다. 캐싱이 관련되었을 수도 있습니다.
.json 파일이 CSV 가져오기 코드를 거치면 .json 파일의 쉼표와 줄 바꿈이 데이터 테이블의 모양을 결정하게 됩니다. .json 파일 작성자가 다른 개행을 입력하기로 결정하면 다른 데이터 테이블을 얻게 됩니다. .json 가져오기를 사용하면 .json 파일의 변경 사항에 대해 코드를 보다 강력하게 만들 수 있습니다.
open() 함수는 파일 확장자를 사용하여 파일 형식을 결정할 수 있습니다. 열기 위한 추가 매개변수는 파일 확장자를 재정의하며 특히 URL이 다음과 같은 경우 URL과 함께 사용해야 합니다.
?매개변수=값
끝에 첨부.
Re: URL에서 연 JSON 파일은 어떻게 파싱하나요?내 소프트웨어를 v13.2로 업데이트했으며 이제 내 URL을 열고 다음을 사용하여 새 데이터 테이블로 올바르게 구문 분석할 수 있습니다.
open("my URL","json")이 명령을 실행하는 것은 여전히 GUI 파일-->열기 명령보다 상당히 느립니다(처리 시간이 약 2배 더 깁니다). GUI를 사용할 때 파일의 다운로드 상태를 표시하는 대화 상자가 나타납니다. open() JSL 명령으로 받지 못한 정보입니다. 업그레이드하기 전에도 GUI 파일-->open은 URL을 빠르게 열고 파일을 올바르게 구문 분석할 수 있었습니다(출력은 open("my URL",text)와 다름). JSL을 사용하여 파일->열기 프로세스를 정확하게 복제할 수 있는 방법이 있습니까? 파일-->열기 실행 시 생성되는 코드를 기록할 수 있는 방법이 있나요?
Re: URL에서 열린 JSON 파일을 어떻게 파싱합니까?json 지원은 13.0 이후에 추가되었을 수 있습니다. 나는 당신이 받고있는 파일이 "json"이 아닌 "text"를 사용하는 것과 같을 것이라고 생각합니다.
open("http://date.jsontest.com/", "text")
이 테이블을 생성합니다.
JSON data, not split up very wellJSON data, not split up very well잘 분할되지 않은 JSON 데이터
JMP 13.2에서는 다음을 사용합니다.
open("http://date.jsontest.com/","json")
훨씬 더 유용한 테이블을 얻습니다.
JSON data, split into columnsJSON data, split into columns열로 분할된 JSON 데이터
"텍스트"를 지정하면 파일->열기에서 볼 수 있는 테이블을 얻을 수 있을 것입니다. 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)내 URL에 ",JSON" 확장자를 추가하려고 했고 다음 오류가 발생했습니다.
//:*/
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" )