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

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

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

添付のコードは十分にテストされていません。
ここにいるとしたら、これは JMP に優れたビルトイン JSON (および XML) 解析機能が実装される前のことです。 この例は、JMP のパターン マッチングを効率的に使用する方法の優れた例です。
JSON および XML インポート用の組み込みウィザードは、おそらくこのコードよりも優れたパフォーマンスを発揮し、必要なデータを含むデータ テーブルを作成するのに役立ちます。