jsmn 예제

août 2, 2019 8:30 Publié par

나는 jsmn을 사용하는 데 사용하지만 조금 너무 낮은 수준을 발견했다. 결국 나는 cJSON으로 마이그레이션하고 거대한 메모리 구조로 한 번에 json을 구문 분석했습니다. 어쩌면 cJSON은 가장 빠르지 않지만 (나는 그것을 벤치 마킹하거나 고속 구문 분석 앱에서 필요)하지만 API가 정말 잘 쓰여져 있습니다. 빌드에 성공한 경우 libjsmn.a 라이브러리를 받아야 합니다. 포함해야 하는 헤더 파일을 “jsmn.h”라고 합니다. 중요한 순간은 jsmn 토큰이 데이터를 보유하지 않고 대신 JSON 문자열의 토큰 경계를 가리킨다는 것입니다. 위의 예에서 jsmn은 다음과 같은 토큰을 만듭니다: 시작/끝 위치 외에 복잡한 형식(예: 배열 또는 개체)에 대한 jsmn 토큰에는 여러 자식 항목이 포함되어 있으므로 개체 계층 구조를 쉽게 따를 수 있습니다. 모든 jsmn 토큰에는 다음 중 하나인 형식이 있습니다. 벤치 마크 jsmn에서 작은 개체 (~ 4KB)에 대 한 꽤 좋은 결과 보여 주었다. 그러나 큰 물체의 경우 매우 느렸습니다. 이 문제는 상위 노드에 대한 링크를 저장하여 해결할 수 있습니다. 토큰 당 약 4 바이트를 느슨하게하지만 속도가 훨씬 높을 것입니다 (그런데이 작은 해킹 jsmn이 벤치 마크에서 가장 빠른 파서인 것 같습니다).

JSON_ERROR_NOMEM을 받으면 더 많은 토큰을 다시 할당하고 jsmn_parse를 다시 호출해야 합니다. 스트림에서 JSON 데이터를 읽는 경우 jsmn_parse를 주기적으로 호출하고 반환 값이 JSON_ERROR_PART가 아닌지 확인할 수 있습니다. 문제가 발생하면 jsmn_parse()에서 반환되는 부정적인 오류가 발생합니다. 반환 값은 다음 중 하나가 됩니다: 나중에 jsmn_parse() 함수를 사용하여 JSON 문자열을 파서와 함께 처리할 수 있습니다. 즉, realloc()를 사용하여 더 많은 토큰을 얻거나 더 많은 데이터가 도착할 때 js 문자열을 재할당할 수 있습니다. 기본적으로 jsmn은 비엄격 모드에서 작동합니다. 그것은 당신이 JSON 다른 유용한 형식에 사용할 수 있습니다. 비 엄격 모드에서 jsmn은 jsmn이 JSON 문자열을 토큰으로 분할합니다. JSON 문자열을 생각해 봅시다: 모든 작업은 jsmn_parser 개체에 의해 수행됩니다. jsmn (`재스민`처럼 발음)은 C의 최소 JSON 파서입니다. 리소스가 제한된 프로젝트 또는 임베디드 시스템에 쉽게 통합할 수 있습니다. jsmn_parse의 비음 반환 값은 파서에서 실제로 사용하는 토큰 수입니다.

리포지토리 레이아웃은 간단합니다: jsmn.c 및 jsmn.h는 라이브러리 파일입니다. demo.c는 jsmn을 사용하는 방법의 예입니다 (단위 테스트에서도 사용됩니다); test.sh 테스트 스크립트입니다. 또한 내부에 README, 라이센스 및 메이크 파일 파일을 찾을 수 있습니다. 구성 파일처럼 보입니다. 그리고 이것은 자바 스크립트 코드를 구문 분석하기 위해 jsmn을 사용하는 방법입니다 : jsmn은 모든 기능을 누락하지만 대신 견고하도록 설계되었습니다 (잘못된 데이터로도 잘 작동해야함), 빠른 (즉석에서 데이터를 구문 분석하고 재진입), 휴대용 (불필요한 것은 없습니다). 종속성 또는 비표준 C 확장) 물론 단순성은 핵심 기능입니다. 라이브러리 소스는 https://github.com/zserge/jsmn. 엄격 모드로 전환하려면 JSMN_STRICT 전처리기 변수를 정의해야 합니다.

일반적으로 JSON 파서가 JSON 문자열을 내부 개체 표현으로 변환합니다. 그러나 C를 사용하는 경우 해시 테이블, 반사 등이 없기 때문에 까다로워집니다. 그렇기 때문에 C로 작성된 대부분의 JSON 파서가 휠을 재창조하고 사용자 지정 JSON과 같은 오브젝트, 사용자 지정 해시 맵을 발명하거나 SAX 파서와 같은 콜백을 사용합니다. 저장소를 복제하려면 수은이 설치되어 있어야 합니다.

Classés dans :Non classé

Cet article a été écrit par NotreSite

Les commentaires sont fermés.