Come analizzare un file JSON aperto dall'URL?Vorrei importare un file JSON in JMP scaricato dal Web. Il modo migliore in cui sono stato in grado di farlo è tramite la GUI, selezionando manualmente File -> Apri -> e inserendo l'URL in "Nome file". Se seleziono "File di dati JSON (*.json)" dall'elenco dei tipi di file, JMP scaricherà il file e aprirà i dati analizzati in un nuovo datatable. Sfortunatamente, non sono stato in grado di scrivere uno script che replichi questo processo.
Un semplice apri("URL") Il comando salva il contenuto JSON dell'URL nel registro e non apre un nuovo datatable. Ho provato a modificare il codice in: open("URL","json") , ma questo restituisce un errore e non vengono ricevuti dati.
posso correre salva file di testo("percorso output/nomefile.json",open("URL")) poi open("percorso output/nomefile.json") e JMP analizzerà automaticamente il file in un nuovo datatable. Questa soluzione alternativa raggiunge il mio obiettivo, ma il tempo di elaborazione è sostanzialmente più lungo rispetto al processo manuale file-->open descritto nel paragrafo precedente. Molti degli URL che sto tentando di importare contengono grandi quantità di dati, quindi vorrei ridurre il più possibile i tempi di elaborazione.
Come posso scaricare un file JSON direttamente da un URL e aprire i dati in una tabella analizzata correttamente?
Sto eseguendo JMP 13.0.0 su Windows.
Ri: Come analizzare un file JSON aperto dall'URL?CIAO @jwebber ,
Sono contento di sapere che sei riuscito a trovare una soluzione.
Un suggerimento che avrei è quello di utilizzare RunProgram per eseguire il tuo file VBScript invece di utilizzare la funzione Open.
L'utilizzo di RunProgram garantisce che lo script venga eseguito su un host VBScript invece di fare affidamento sull'associazione di file del computer per i file vbs (che potrebbe potenzialmente essere un editor di testo).
Un altro vantaggio dell'utilizzo di RunProgram è che puoi utilizzare l'opzione "testo" per ReadFunction che metterà in pausa lo script JSL fino al completamento di VBScript.
Di seguito sono riportate alcune informazioni che ho precedentemente condiviso nella community di JMP Qui .
È possibile utilizzare gli eseguibili WScript o CScript per eseguire un file VBScript utilizzando RunProgram. L'unica differenza è che WScript mostrerà errori in un MessageBox, mentre CScript scrive l'errore nella console/stdout.
Ecco un esempio che utilizza 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>
Ri: Come analizzare un file JSON aperto dall'URL?Grazie a tutti per le vostre risposte. Ho finito per risolvere questo problema utilizzando uno script VB per scaricare il file .json dal mio URL. L'avvio del download utilizzando VBS è stato molto più veloce di qualsiasi metodo che potessi trovare con JMP.
Fortunatamente, sono stato ancora in grado di utilizzare JSL per l'intero processo. Ho scritto lo script VB in JSL, ho salvato i dati con un'estensione .vbs e poi ho emesso un comando open() da JSL per eseguire lo script VB (che poi ha scaricato i miei dati).
Ecco un esempio del codice che ho utilizzato:
//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");Ri: Come analizzare un file JSON aperto dall'URL?Chiaramente, non ho letto a fondo il tuo intervento originale!
Sapevi davvero che passare ai dati JSON era la strada da percorrere.... Sono contento che tu abbia l'equivalente JSL dalle altre risposte e sembra che abbiamo del lavoro da fare sulle prestazioni per recuperare il tempo di download della finestra di dialogo Apri.
John
Ri: Come analizzare un file JSON aperto dall'URL?JMP 13.2 offre un controllo un po' maggiore sulla modalità di apertura del file.Sfortunatamente, non è troppo ovvio che tu possa controllare il comportamento.Dovresti essere in grado di ottenere ciò di cui hai bisogno.
Se l'estensione del file in arrivo non è nota a JMP, controlleremo l'elenco a discesa del tipo di file a destra del campo di modifica. Se questo ha una selezione che non è ambigua allora apriremo il file supponendo che sia un file del tipo selezionato. Se la selezione del menu a discesa del tipo di file è ambigua (ad es. Tutti i file JMP o Tutti i file), chiediamo al sistema operativo di aprire il file.
Quindi, nel tuo caso puoi provare questo:
* Incolla l'URL
* Cambia il menu a discesa da "Tutti i file JMP" a "Dati di testo" o "File di dati JSON"
* [Facoltativo] Potresti voler deselezionare "Seleziona questo filtro la prossima volta..." se non vuoi che venga ricordato.
* Fare clic su OK
La finestra di dialogo del sistema operativo scaricherà il file in una posizione temporanea con un nome folle come FSERXVJW senza estensione. JMP tenterà di aprire il file con il tipo selezionato nell'elenco a discesa.
Sono interessato a sapere se avere la finestra di dialogo che scarica il tuo json e si apre con la scelta "JSON Data File" è più veloce di Open("URL","json"); itinerario. Potremmo avere del lavoro perfetto da fare in quel caso...
John
Ri: Come analizzare un file JSON aperto dall'URL?Sono contento che tu abbia ricevuto l'aggiornamento.
Puoi postare una foto dei tavoli? Se c'è uno script sorgente, posta anche quello. Lo script sorgente avrà un file temporaneo anziché l'URL; l'apertura viene sempre eseguita da un file scaricato dall'URL. Dovresti essere in grado di sostituire il nome del file temporaneo con l'URL. È possibile che JMP 13 utilizzi un metodo diverso per scaricare l'URL in un file temporaneo quando si utilizza il menu rispetto a JSL e potrebbe essere più veloce. È anche possibile che sia coinvolta la memorizzazione nella cache.
Quando il file .json passa attraverso il codice di importazione CSV, le virgole e le nuove righe nel file .json determineranno la forma della tabella dati. Se il writer del file .json decide di inserire nuove righe diverse, otterrai una tabella di dati diversa. L'uso dell'importazione .json contribuirà a rendere il codice più robusto rispetto alle modifiche nel file .json.
La funzione open() potrebbe essere in grado di utilizzare un'estensione di file per determinare il tipo di file. Il parametro aggiuntivo da aprire sovrascriverà l'estensione del file e dovrebbe probabilmente essere utilizzato con un URL, specialmente se l'URL potrebbe avere
?parametro=valore
aggiunto alla fine.
Ri: Come analizzare un file JSON aperto dall'URL?Ho aggiornato il mio software alla v13.2 e ora posso aprire il mio URL e farlo analizzare correttamente in un nuovo datatable usando
open("my URL","json")L'esecuzione di questo comando è ancora sostanzialmente più lenta del comando file-->open della GUI (il tempo di elaborazione è circa il doppio). Quando si utilizza la GUI, viene visualizzata una finestra di dialogo che mostra lo stato di download del file, informazioni che non ricevo con il comando JSL open(). Anche prima del mio aggiornamento, il file GUI -> open era in grado di aprire rapidamente l'URL e analizzare correttamente il file (l'output era diverso da open("my URL",text)). C'è un modo per replicare esattamente il file -> processo aperto usando JSL? Esiste un modo per registrare il codice generato durante l'esecuzione di file -> apri (simile al modo in cui la registrazione di una macro in Excel acquisisce il codice generato utilizzando la GUI)?
Ri: Come analizzare un file JSON aperto dall'URL?Il supporto json potrebbe essere stato aggiunto dopo la 13.0. Penso che il file che stai ricevendo sia probabilmente equivalente all'uso di "text" piuttosto che "json".
open("http://date.jsontest.com/", "text")
produce questa tabella:
JSON data, not split up very wellJSON data, not split up very wellDati JSON, non suddivisi molto bene
in JMP 13.2, utilizzando
open("http://date.jsontest.com/","json")
Ottengo una tabella molto più utile:
JSON data, split into columnsJSON data, split into columnsDati JSON, suddivisi in colonne
Penso che se specifichi "testo" probabilmente otterrai la tabella che vedi da File-> Apri. Spero che tu possa eseguire l'aggiornamento a 13.2 e sfruttare la migliore importazione JSON.
Ri: Come analizzare un file JSON aperto dall'URL?Lavorerò per aggiornare il mio software.
Non sono ancora sicuro del motivo per cui, utilizzando JSL, non riesco a replicare il file della GUI -> apri il processo che gestisce correttamente il mio URL e apre un nuovo datatable. Ci deve essere un modo per scrivere questa procedura, giusto?
Ri: Come analizzare un file JSON aperto dall'URL?Ho appena provato in JMP 13.0.0 e ho replicato l'errore che stai vedendo. Sto usando JMP 13.2 e non ci sono problemi.
Saresti in grado di aggiornare alla 13.2 e riprovare? È possibile scaricare l'aggiornamento all'indirizzo jmp.com/update .
Ri: Come analizzare un file JSON aperto dall'URL?Grazie per la risposta, Giustino. Ho eseguito il tuo codice di esempio e ho ricevuto il seguente errore:
//:*/
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)Ho tentato di aggiungere l'estensione ",JSON" al mio URL e ho ricevuto il seguente errore:
//:*/
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)Pensieri?
Ri: Come analizzare un file JSON aperto dall'URL?È possibile aggiungere l'opzione "JSON" alla funzione Apri per forzare l'apertura del file JSON come tabella dati.
Open( "http://date.jsontest.com/", JSON );
Ecco un confronto dal registro quando si utilizza questa opzione rispetto a quando non si utilizza l'opzione:
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" )