Xan發帖很酷代碼將 JSON 數據讀入 JMP。Xan 指出 JSL 加載大型 JSON 文件的速度很慢;下面介紹一些 JSL 替代品,以使其速度更快。(JSON 更適合小對象,但如果您必須加載 100K 或更多,這會有所幫助。)
Xan 的原始代碼有一個解析例程,每次讀取一個字符的 JSON 字符串:

變量位置遍歷字符串的長度,直到結尾,一次一個字符。Xan 代碼中真正的魔力在於對 [, ], {, } 字符的處理。我只是將神奇的部分複製到替換代碼中。在上面,您可以看到引號、冒號、t、f 的處理。這些字符指導解析器對後續字符的處理。
JMP 的模式匹配器是這項工作的更好選擇。以下 JSL 是單個模式匹配,它從頭到尾處理整個字符串。當每個塊被匹配時,匹配中嵌入的一些 JSL 會處理該塊。
替換代碼的片段(請勿複制!更好的代碼在附件中):

替換解析函數現在只有 5 行,但原始解析函數的代碼現在位於模式解析,乍一看似乎相當複雜。但實際上它與原版中的邏輯幾乎相同(魔法被複製幾乎確切地!)模式解析開始於帕特POS (0) 並以帕特RP位置(0) 強制模式匹配所有內容。原始代碼有一個 while 循環。模式解析有拍重複反而。拍重複重複三個操作的串聯 (+):(1)帕特POS (無參數)將當前字符位置記錄到失敗位置因此,如果 JSON 數據難以理解,Parse 可以說一些有用的內容。(2)帕特柵欄通過告訴匹配者直到柵欄為止的所有內容都是正確的並且不應重新訪問來加快匹配速度。(3) 帶括號的選項列表 ( | ) 是有趣的地方;跳過空格、匹配名稱、匹配冒號等。圖案名稱和花型編號(未顯示)在附件中並按照您的猜測進行操作。
最後一塊拼圖是帕特測試。帕特測試將其參數計算為 0 或 1;如果為1,則測試成功,沒有匹配任何字符,並且繼續匹配。(如果失敗並返回 0,則匹配器會備份並嘗試其他選擇,但這種情況永遠不會發生在這裡:注意每一個帕特測試返回值以 ;1 結尾。)在此程序中,帕特測試用於在比賽中間注入一些 JSL,而不是實際測試任何內容。
有了這些改變和 Xan 建議的改變為了將列表末尾的慢速插入替換為列表開頭的快速插入,JMP 在 90 秒內加載 180MB 的 JSON 數據(而 5 分鐘內加載 0.25MB),性能提升了 1000 倍。也許更好,因為它現在可能與文件大小成線性關係。

所附代碼尚未經過充分測試,如果對您有用,請回帖,謝謝!
如果您發現自己在這裡:這是在 JMP 具有良好的內置 JSON(和 XML)解析之前。 此示例仍然是如何有效使用 JMP 模式匹配的一個很好的示例。
用於 JSON 和 XML 導入的內置嚮導可能會勝過此代碼,並幫助您使用所需的數據創建數據表。