Xan ha postato molto bene 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 cammina attraverso la lunghezza della corda, a FINE , un carattere alla volta.La vera magia nel codice di Xan sta nella gestione dei caratteri [, ], {, }.Ho appena copiato le parti magiche nel codice sostitutivo.Sopra, puoi vedere la gestione di 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.Poiché 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 ora è presente il codice della funzione di analisi originale PatternParse , che a prima vista appare abbastanza complicato.Ma in realtà è più o meno la stessa logica dell'originale (la magia è copiata Quasi esattamente!) PatternParse inizia con PatPos (0) e termina con PatRPos (0) che forzano il modello a corrispondere a tutto.Il codice originale aveva un ciclo while.PatternParse ha PatRepeat Invece.PatRepeat sta ripetendo una concatenazione (+) di tre operazioni: (1) PatPos (nessun argomento) registra la posizione corrente del carattere in failpos quindi Parse può dire qualcosa di utile se i dati JSON sono incomprensibili.(2) PatFence accelera la partita dicendo al matcher che tutto fino al recinto è corretto e non dovrebbe essere rivisitato.(3) L'elenco di alternative tra parentesi ( | ) è dove avviene il divertimento; salta lo spazio bianco, abbina un nome, abbina i due punti, ecc. Nome modello E Numero modello (non mostrato) sono in allegato e fanno quello che indovineresti.
L'ultimo pezzo del puzzle è PatTest .PatTest valuta il suo argomento a 0 o 1; se 1, il test ha esito positivo, non trova alcun carattere e la corrispondenza continua.(Se fallisce con uno 0, il matcher esegue il backup e prova 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 bel 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 (rispetto a 0,25 MB in 5 minuti), con un miglioramento di 1000 volte.Meglio, forse, dal momento che ora potrebbe essere lineare con le dimensioni 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 in modo efficiente il pattern matching di JMP.
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.