danbibibi
article thumbnail
Published 2023. 12. 27. 15:37
RapidJSON 정리 언어/C, C++

RapidJSON 

SAX/DOM 스타일 API를 모두 갖춘 C++용 빠른 JSON parser/generator

 

Install

별도의 설치는 필요하지 않다.

git clone을 받은 후 include 폴더 내 rapidjson 폴더를 src 폴더와 같은 경로에 위치 시켜 사용할 수 있다.

$ https://github.com/Tencent/rapidjson.git

 

RapidJSON 사용

// 입력 JSON을 JSONx 형식으로 변환하는 command line tool
// rapidjson/example/simpledom/simpledom.cpp`
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
 
using namespace rapidjson;
 
int main() {
    // 1. Parse a JSON string into DOM.
    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
    Document d;
    d.Parse(json);
 
    // 2. Modify it by DOM.
    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);
 
    // 3. Stringify the DOM
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);
 
    // Output {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;
    return 0;
}

DOM API

SAX API

  • simplereader: Reader로 JSON을 구문 분석하는 동안 모든 SAX 이벤트를 덤프
  • condense: 모든 공백을 제거하고 JSON을 다시 작성하는 command line tool 
  • pretty: PrettyWriter의 들여쓰기와 줄 바꿈을 사용하여 JSON을 다시 작성하는 command line tool
  • capitalize: JSON에서 문자열을 대문자로 표시하는 command line tool
  • messagereader: SAX API를 사용하여 JSON 메시지를 parse
  • serialize: SAX API를 사용하여 C++ 개체를 JSON으로 serialize(직렬화)
  • jsonx: SAX eventsJSONx (일종의 XML) format으로 문자열화(stringify)하는 JsonxWriter를 구현

Schema

  • schemavalidator : JSON 스키마로 JSON을 검증하는 command line tool

Advanced

  • prettyauto: UTF 인코딩으로 JSON을 자동으로 처리하도록 수정된 pretty 버전
  • parsebyparts: C++11 thread를 사용하여 JSON을 부분적으로 구문 분석할 수 있는 AsyncDocumentParser를 구현
  • filterkey: 사용자가 지정한 key로 모든 value을 제거하는 command line tool
  • filterkeydom: 위와 동일한 tool이지만, generator를 사용하여 문서를 채우는 방법을 보여줌

 

참고

 

RapidJSON: Main Page

A fast JSON parser/generator for C++ with both SAX/DOM style API Tencent is pleased to support the open source community by making RapidJSON available. Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. Build status Introduction RapidJSON

rapidjson.org

 

성능 비교

Conformance

 

Parsing Time

Parsing Memory

'언어 > C, C++' 카테고리의 다른 글

make, Makefile 정리  (0) 2024.02.13
[C++] stringstream  (0) 2024.01.02
json-c 정리  (1) 2023.12.26
[C++] Standard Template Library - STL  (0) 2023.08.24
[C++] 객체 지향 프로그래밍  (0) 2023.08.16
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로