Xanはとてもクールに投稿しましたコードJSONデータをJMPに読み込みます。Xanは、JSLが大きなJSONファイルの読み込みに時間がかかっていることを指摘しました。これは、より高速にするためのいくつかの代替JSLを示しています。(JSONは小さなオブジェクトに適していますが、100K以上をロードする必要がある場合は、これが役立ちます。)
Xanの元のコードには、JSON文字列を一度に1文字ずつ読み取るための解析ルーチンがあります。

変数pos文字列の長さを歩き、終わり、一度に1文字。Xanのコードの本当の魔法は、[、]、{、}文字の処理にあります。魔法のパーツを交換コードにコピーしました。上記では、引用符、コロン、t、fの処理を確認できます。これらの文字は、パーサーによる後続の文字の処理を指示します。
JMPのパターンマッチャーは、このジョブに適しています。次のJSLは、文字列全体を最初から最後まで処理する単一のパターンマッチです。各チャンクが一致すると、一致に埋め込まれた一部のJSLがチャンクを処理します。
置換コードの抜粋(これをコピーしないでください!添付ファイルのより良いコード):

置換された解析関数は5行になりましたが、元の解析関数のコードは次のようになっています。 PatternParse 、一見するとかなり複雑に見えます。しかし、実際には、元のロジックとほぼ同じです(魔法はコピーされます)ほとんどまさに!) PatternParseで始まるPatPos (0)で終わりPatRPos (0)パターンをすべてに一致させる。元のコードにはwhileループがありました。PatternParseもっているPatRepeat代わりは。PatRepeat 3つの操作の連結(+)を繰り返しています:(1) PatPos (引数なし)現在の文字位置をに記録しますfailposしたがって、JSONデータが理解できない場合、Parseは何か役立つことを言うことができます。(2) PatFenceフェンスまでのすべてが正しく、再訪すべきではないことをマッチャーに伝えることで、試合をスピードアップします。(3)括弧で囲まれた選択肢のリスト(|)は、楽しみが起こる場所です。空白をスキップする、名前を一致させる、コロンを一致させるなど。パターン名と型番(表示されていません)は添付ファイルにあり、あなたが推測することを行います。
パズルの最後のピースはPatTest 。PatTest引数を0または1に評価します。 1の場合、テストは成功し、文字は一致せず、一致が続行されます。(0で失敗した場合、マッチャーはバックアップして代替を試みますが、ここでは発生しません:注意毎日PatTest戻り値は;1で終わります。)このプログラムでは、 PatTest実際に何かをテストするためではなく、試合の途中にJSLを注入するために使用されます。
これらの変更とXanが提案した変更によりリストの最後の遅い挿入をリストの最初の速い挿入に置き換えるために、JMPは90秒で180MBのJSONデータをロードします(5分で.25MBに対して)。これは1000倍の改善です。おそらく、ファイルサイズに比例する可能性があるためです。

添付のコードは十分にテストされていません。うまくいったらメモを投稿してください。ありがとうございます。
ここにいる場合:これは、JMPに適切な組み込みのJSON(およびXML)解析が行われる前のことです。 この例は、JMPのパターンマッチングを効率的に使用する方法の優れた例です。
JSONおよびXMLインポート用の組み込みウィザードは、おそらくこのコードよりもパフォーマンスが高く、必要なデータを使用してデータテーブルを作成するのに役立ちます。