Xan ha pubblicato un post molto interessante codice per leggere i dati JSON in JMP.Xan ha notato che JSL caricava lentamente file JSON di grandi dimensioni; ecco uno sguardo ad alcuni JSL sostitutivi per renderlo più veloce.(JSON è più adatto per piccoli oggetti, ma se devi caricare 100K o più, questo ti aiuterà.)
Il codice originale di Xan ha una routine di analisi per leggere la stringa JSON un carattere alla volta:

la variabile pos percorre la lunghezza della stringa, a fine , un carattere alla volta.La vera magia nel codice di Xan è nella gestione dei caratteri [, ], {, }.Ho appena copiato le parti magiche nel codice sostitutivo.Sopra, puoi vedere la gestione per virgolette, due punti, t, f.Questi caratteri dirigono la gestione da parte del parser dei caratteri successivi.
Il pattern matcher di JMP è una scelta migliore per questo lavoro.Il seguente JSL è un singolo pattern match che elabora l'intera stringa dall'inizio alla fine.Man mano che ogni blocco viene abbinato, alcuni JSL incorporati nella corrispondenza gestiscono il blocco.
Snippet del codice sostitutivo (non copiarlo!Codice migliore in allegato):

La funzione di analisi sostitutiva ora è di sole 5 righe, ma il codice della funzione di analisi originale è ora presente Analisi del modello , che a prima vista appare piuttosto complicato.Ma in realtà è più o meno la stessa logica dell'originale (la magia viene copiata quasi Esattamente!) Analisi del modello inizia con Pat Pos (0) e termina con PatRPos (0) che obbligano il modello a corrispondere a tutto.Il codice originale aveva un ciclo while.Analisi del modello ha Pat Ripeti invece.Pat Ripeti sta ripetendo una concatenazione (+) di tre operazioni: (1) Pat Pos (nessun argomento) registra la posizione corrente del carattere in fail quindi Parse può dire qualcosa di utile se i dati JSON sono incomprensibili.(2) PatFence accelera la partita dicendo al matcher che tutto fino alla recinzione è corretto e non dovrebbe essere rivisitato.(3) L'elenco delle alternative tra parentesi ( | ) è dove avviene il divertimento; salta lo spazio bianco, abbina un nome, abbina i due punti, ecc. Nome del modello e Numero di modello (non mostrato) sono nell'allegato e fai quello che indovineresti.
L'ultimo pezzo del puzzle è PatTest .PatTest valuta il suo argomento su 0 o 1; se 1, il test ha esito positivo, non trovando caratteri e la corrispondenza continua.(Se fallisce con uno 0, il matcher esegue il backup e prova le alternative, ma qui non succede mai: nota ogni PatTest termina con ;1 per il valore restituito.) In questo programma, PatTest viene utilizzato per iniettare un po' di JSL nel mezzo di una partita, non per testare effettivamente nulla.
Con questi cambiamenti e un cambiamento suggerito da Xan per sostituire un inserimento lento alla fine di un elenco con un inserimento veloce all'inizio di un elenco, JMP carica 180 MB di dati JSON in 90 secondi (contro .25 MB in 5 minuti), un miglioramento di 1000 volte.Meglio, forse, dal momento che ora potrebbe essere lineare con la dimensione del file.

Il codice allegato non è ben testato, invia una nota se funziona per te, grazie!
Se ti trovi qui: questo era prima che JMP avesse una buona analisi JSON (e XML) incorporata. Questo esempio è ancora un ottimo esempio di come utilizzare la corrispondenza dei modelli di JMP in modo efficiente.
La procedura guidata integrata per l'importazione JSON e XML probabilmente supererà questo codice e ti aiuterà a creare una tabella di dati con i dati di cui hai bisogno.