Xan 发帖很酷代码将 JSON 数据读入 JMP。Xan 指出 JSL 加载大型 JSON 文件的速度很慢;下面是一些替代 JSL 以使其更快。(JSON 更适合小对象,但如果您必须加载 100K 或更多,这将有所帮助。)
Xan 的原始代码有一个解析例程,可以一次读取一个字符的 JSON 字符串:

变量位置遍历字符串的长度,到结尾,一次一个字符。Xan 代码中真正的魔力在于对 [, ], {, } 字符的处理。我只是将神奇的部分复制到替换代码中。上面可以看到对引号、冒号、t、f的处理。这些字符指导解析器处理后续字符。
JMP 的模式匹配器是这项工作的更好选择。下面的 JSL 是一个从头到尾处理整个字符串的单一模式匹配。当每个块匹配时,匹配中嵌入的一些 JSL 会处理该块。
替换代码的片段(不要复制这个!附件中有更好的代码):

替换 parse 函数现在只有 5 行,但来自原始 parse 函数的代码现在在模式解析,乍一看似乎相当复杂。但实际上它与原版中的逻辑几乎相同(魔法被复制几乎确切地!)模式解析开始于PatPos (0) 并以PatRPos (0) 强制模式匹配所有内容。原始代码有一个while循环。模式解析有PatRepeat反而。PatRepeat正在重复三个操作的串联 (+):(1) PatPos (无参数)将当前字符位置记录到失败位置因此,如果 JSON 数据难以理解,Parse 可以说一些有用的东西。(2)围网通过告诉匹配器到栅栏的所有内容都是正确的并且不应该重新访问来加快匹配速度。(3) 括号中的备选方案 (|) 是有趣的地方;跳过空格、匹配名称、匹配冒号等。图案名称和图案编号(未显示)在附件中,并按照您的猜测进行操作。
最后一块拼图是PatTest .PatTest将其参数评估为 0 或 1;如果为 1,则测试成功,不匹配任何字符,匹配继续。(如果它以 0 失败,那么匹配器会备份并尝试替代方案,但这永远不会发生在这里:注意每一个PatTest以 ;1 结尾作为返回值。)在这个程序中, PatTest用于在比赛中间注入一些 JSL,而不是实际测试任何东西。
通过这些更改和 Xan 建议的更改要将列表末尾的慢速插入替换为列表开头的快速插入,JMP 在 90 秒内加载了 180MB 的 JSON 数据(而 5 分钟内加载了 0.25MB),提高了 1000 倍。也许更好,因为它现在可能与文件大小成线性关系。

附上的代码没有经过很好的测试,如果对你有用,请留言,谢谢!
如果您发现自己在这里:这是在 JMP 具有良好的内置 JSON(和 XML)解析之前。 这个例子仍然是一个很好的例子,说明了如何有效地使用 JMP 的模式匹配。
JSON 和 XML 导入的内置向导可能会胜过此代码,并帮助您使用所需数据制作数据表。