Xan은 매우 멋진 게시물을 게시했습니다. 암호 JSON 데이터를 JMP로 읽어들입니다.Xan은 JSL이 대용량 JSON 파일을 느리게 로드하고 있다고 지적했습니다. 다음은 더 빠르게 하기 위한 대체 JSL을 살펴보는 것입니다.(JSON은 작은 개체에 더 적합하지만 100K 이상을 로드해야 하는 경우 도움이 됩니다.)
Xan의 원래 코드에는 한 번에 한 문자씩 JSON 문자열을 읽는 구문 분석 루틴이 있습니다.

변수 위치 문자열의 길이를 통해 이동합니다. 끝 , 한 번에 한 문자.Xan 코드의 진정한 마법은 [, ], {, } 문자를 처리하는 데 있습니다.마법 같은 부분을 교체 코드에 복사했습니다.위에서 따옴표, 콜론, t, f에 대한 처리를 볼 수 있습니다.이러한 문자는 파서가 후속 문자를 처리하도록 지시합니다.
JMP의 패턴 매처가 이 작업에 더 적합합니다.다음 JSL은 전체 문자열을 처음부터 끝까지 처리하는 단일 패턴 일치입니다.각 청크가 일치하면 일치에 포함된 일부 JSL이 청크를 처리합니다.
교체 코드 스니펫(복사하지 마세요!첨부 파일의 더 나은 코드):

대체 구문 분석 기능은 이제 5줄이지만 원래 구문 분석 기능의 코드는 이제 패턴파스 , 언뜻보기에 상당히 복잡해 보입니다.그러나 실제로는 원본과 거의 동일한 논리입니다(마법은 복사됩니다. 거의 정확히!) 패턴파스 ~로 시작하다 팻포스 (0)으로 끝납니다. PatRPos (0) 패턴이 모든 것과 일치하도록 합니다.원래 코드에는 while 루프가 있습니다.패턴파스 가지다 팻리피트 대신에.팻리피트 세 작업의 연결( + )을 반복합니다. (1) 팻포스 (인수 없음) 현재 문자 위치를 페일포스 따라서 Parse는 JSON 데이터를 이해할 수 없는 경우 유용한 정보를 말할 수 있습니다.(2) 팻펜스 매처에게 펜스까지의 모든 것이 정확하며 다시 방문해서는 안 된다고 알려줌으로써 경기 속도를 높입니다.(3) 괄호 안의 대안 목록( | )은 재미있는 일이 일어나는 곳입니다. 공백 건너뛰기, 이름 일치, 콜론 일치 등 패턴 이름 그리고 패턴 번호 (표시되지 않음)은 첨부 파일에 있으며 추측한 대로 수행합니다.
퍼즐의 마지막 조각은 팻테스트 .팻테스트 인수를 0 또는 1로 평가합니다. 1이면 테스트가 성공하고 일치하는 문자가 없으며 일치가 계속됩니다.(0으로 실패하면 매처는 백업하고 대안을 시도하지만 여기서는 절대 발생하지 않습니다. 모든 팻테스트 반환 값은 ;1로 끝납니다.) 이 프로그램에서 팻테스트 실제로 아무것도 테스트하지 않고 경기 중간에 일부 JSL을 주입하는 데 사용됩니다.
이러한 변경 사항과 Xan이 제안한 변경 사항으로 목록 끝에 느린 삽입을 목록 시작 부분에 빠른 삽입으로 바꾸기 위해 JMP는 90초 안에 180MB의 JSON 데이터를 로드합니다(vs .25MB는 5분). 이는 1000배 향상된 것입니다.지금은 파일 크기에 선형적일 수 있기 때문에 더 좋습니다.

첨부된 코드는 제대로 테스트되지 않았습니다. 작동하는 경우 메모를 다시 게시하세요. 감사합니다!
JMP에 내장된 JSON(및 XML) 파싱 기능이 훌륭하기 전이었습니다. 이 예는 여전히 JMP의 패턴 일치를 효율적으로 사용하는 방법에 대한 좋은 예입니다.
JSON 및 XML 가져오기를 위한 기본 제공 마법사는 아마도 이 코드를 능가하고 필요한 데이터로 데이터 테이블을 만드는 데 도움이 될 것입니다.