Xan a posté très cool code pour lire les données JSON dans JMP.Xan a noté que le JSL chargeait lentement les fichiers JSON volumineux ; voici quelques JSL de remplacement pour le rendre plus rapide.(JSON convient mieux aux petits objets, mais si vous devez charger 100K ou plus, cela vous aidera.)
Le code original de Xan a une routine d'analyse pour lire la chaîne JSON un caractère à la fois :

la variable position parcourt la longueur de la ficelle, pour fin , un caractère à la fois.La vraie magie du code de Xan réside dans la gestion des caractères [, ], {, }.Je viens de copier les parties magiques dans le code de remplacement.Ci-dessus, vous pouvez voir la gestion des guillemets, deux-points, t, f.Ces caractères dirigent la gestion par l'analyseur des caractères suivants.
Le comparateur de motifs de JMP est un meilleur choix pour ce travail.Le JSL suivant est une correspondance de modèle unique qui traite la chaîne entière du début à la fin.Au fur et à mesure que chaque bloc est mis en correspondance, un JSL intégré dans la correspondance gère le bloc.
Extrait du code de remplacement (ne le copiez pas !Meilleur code en pièce jointe):

La fonction d'analyse de remplacement ne fait plus que 5 lignes, mais le code de la fonction d'analyse d'origine est maintenant dans PatternParse , ce qui semble assez compliqué à première vue.Mais vraiment c'est à peu près la même logique que dans l'original (la magie est copiée presque exactement!) PatternParse commence par PatPos (0) et se termine par PatRPos (0) qui force le modèle à correspondre à tout.Le code original avait une boucle while.PatternParse a PatRépéter Au lieu.PatRépéter répète une concaténation ( + ) de trois opérations : (1) PatPos (sans argument) enregistre la position actuelle du caractère dans failpos donc Parse peut dire quelque chose d'utile si les données JSON sont inintelligibles.(2) PatFence accélère le match en disant au matcher que tout jusqu'à la clôture est correct et ne doit pas être revisité.(3) La liste d'alternatives entre parenthèses ( | ) est l'endroit où le plaisir se produit ; sauter les espaces blancs, faire correspondre un nom, faire correspondre deux-points, etc. Nom du motif et Numéro de modèle (non illustré) sont dans la pièce jointe et faites ce que vous devinez.
La dernière pièce du puzzle est PatTest .PatTest évalue son argument à 0 ou 1 ; si 1, alors le test réussit, ne correspond à aucun caractère, et la correspondance continue.(S'il échoue avec un 0, le matcher recule et essaie des alternatives, mais cela n'arrive jamais ici : remarquez tous PatTest se termine par ;1 pour la valeur de retour.) Dans ce programme, PatTest est utilisé pour injecter du JSL au milieu d'un match, pas pour tester quoi que ce soit.
Avec ces changements et un changement suggéré par Xan pour remplacer une insertion lente en fin de liste par une insertion rapide en début de liste, JMP charge 180 Mo de données JSON en 90 secondes (vs 0,25 Mo en 5 minutes), soit une amélioration de 1000X.Mieux, peut-être, car il pourrait être linéaire avec la taille du fichier maintenant.

Le code ci-joint n'est pas bien testé, postez une note si cela fonctionne pour vous, merci !
Si vous vous trouvez ici : c'était avant que JMP n'ait une bonne analyse JSON (et XML) intégrée. Cet exemple est toujours un excellent exemple de la manière dont vous pouvez utiliser efficacement la correspondance de modèles de JMP.
L'assistant intégré pour l'importation JSON et XML surpassera probablement ce code et vous aidera à créer une table de données avec les données dont vous avez besoin.