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

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

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

첨부된 코드는 제대로 테스트되지 않았습니다. 작동하는 경우 메모를 다시 게시해 주세요. 감사합니다!
여기에서 자신을 발견하면: JMP에 내장 JSON(및 XML) 구문 분석이 제대로 제공되기 전입니다. 이 예는 여전히 JMP의 패턴 일치를 효율적으로 사용할 수 있는 방법에 대한 훌륭한 예입니다.
JSON 및 XML 가져오기를 위한 내장 마법사는 아마도 이 코드보다 성능이 뛰어나 필요한 데이터로 데이터 테이블을 만드는 데 도움이 될 것입니다.