C++ 용 JSON parser 5종 성능 비교

libmongoclient의 JSON parser를 쓰다가 Array에 4096 개라는 제한이 있어서 다른 JSON Parser를 찾아봤다.

속도와 편리성 위주로 고르다 보니 picojson, rapidjson, libjson, vjson 이렇게 넷이 선정되었다.

  • 측정 방법: 2만여 JSON 문서를 Parsing 후 2차원 문자열 배열을 stdout으로 출력
  • 측정 기준: 실행 시간 측정
  • 결과
  시간(분:초)  Destructive  Header-only  Writable  Modifiable
 MongoDB  3:02 (Parsing Failed: 2797/20072)  X  X  O  X
 picojson  6:18  X  O  X  X
 libjson  3:50  X  X  O  O
 vjson  1:45  O  X  X  X
 rapidjson(destructive mode)  1:29  Avail  O  O  O
  • 분석: rapidjson과 vjson은 원본을 복사하지 않고 수정해서 파싱하기 때문에 가장 빨랐다.
vjson을 쓸 수도 있겠지만, 다른 프로그램의 MongoDB 모듈을 모두 대체하려면 Write 기능이 필요해서 rapidjson을 최종 선택하였다.
한 프로그램(JSON parse/modify/write)의 MongoDB 모듈을 rapidjson으로 대체 결과
   전체 실행 시간  파싱 소요시간
 MongoDB  1분1초  29초
 rapidjson  33초  7초

파싱 시간 뿐 아니라 write 시간도 단축 되었음(Building new object -> Modifying).