Sj.h: 약 150줄의 C99로 작성된 아주 작은 JSON 파싱 라이브러리

1 month ago 17

  • Sj.h는 약 150줄로 이루어진 초경량 JSON 파서로, C99 기반 환경에서 사용 가능함
  • 이 라이브러리는 제로 메모리 할당, 최소 상태 유지 등의 특징을 가지고, 가벼운 임베디드 환경이나 의존성 최소화에 용이함
  • 숫자 및 문자열 파싱에 대해 직접 처리하는 방식을 채택하여, 사용자가 관련 처리를 자유롭게 구현 가능함
  • 라인:컬럼 기반의 에러 메시지 지원으로 디버깅 시 가독성 및 위치 식별성이 높음
  • 공개 도메인 소프트웨어로 누구나 자유롭게 사용 및 변경, 배포 등이 허용됨

프로젝트 소개

  • Sj.h는 과도한 기능이나 불필요한 메모리 할당 없이 최소한의 코드만으로 JSON 파싱 기능을 제공하는 C99 헤더 파일임
  • 전체 구현은 약 150줄로, 임베디드 시스템, 도구, 또는 외부 라이브러리 의존성을 줄이고 싶은 경우 적합함

주요 특징

  • 제로 메모리 할당(zero-allocations)최소 상태(minimal state) 로 작동해 메모리 부담이 매우 적음
  • 라인:컬럼 정보가 포함된 에러 메시지로, 파싱 도중 발생하는 문제의 위치 파악이 용이함
  • 숫자 파싱은 기본 제공하지 않으며, strtod, atoi 등 사용자가 원하는 방식을 사용할 수 있음
  • 문자열 파싱도 직접 구현하거나, Unicode surrogate pair 처리 등을 필요에 따라 구축 가능함
  • 모든 소스 코드는 공개 도메인(Unlicense)으로 제공되어, 라이선스 등의 제약 없이 사용·변경 가능함

사용 예시

  • JSON 문자열을 Rect 구조체로 파싱하는 간단한 예시를 제공함
char *json_text = "{ \"x\": 10, \"y\": 20, \"w\": 30, \"h\": 40 }"; typedef struct { int x, y, w, h; } Rect; ...
  • sj_Reader, sj_Value, sj_reader, sj_read, sj_iter_object 등 간단 명료한 API를 사용
  • 숫자 값 파싱이나 키-값 비교는 직접 구현(builtin 제공하지 않음)
  • demo 폴더에서 다양한 추가 사용 예시 확인 가능함

라이선스

  • Sj.h는 누구나 제약 없이 사용할 수 있는 공개 도메인 소프트웨어
  • 자세한 내용은 LICENSE 파일 참고

기타

  • Github 상에서 643 stars, 9 forks 기록
  • 코드와 폴더 구조가 간단하여, 별도 구성이나 빌드 절차 없이 바로 사용할 수 있음
  • 독립적이고, 외부 종속성이 없으며, 주로 경량성사용 편의성이 요구되는 환경에 적합함

Read Entire Article