C & C++/C++

[C++] Visual Studio 2022 에서 C++ rapidjson 사용하기

Razelo 2022. 11. 8. 20:15

c++ 프로젝트에서 json 으로 서버와 주고받을 일이 생겨 관련 라이브러리를 사용해보고자 한다. 

 

c++ 에서 json 을 주고 받기 위해서는 rapidjson 을 주로 사용한다고 한다. 

 

사실상 쓰는 방법은 굉장히 간단한데 세팅하는 방법이 조금 투박하다. 

 

아래처럼 잘 따라하면 rapidjson을 사용할 수 있는 환경을 갖출 수 있을 것이다. 

 

우선 아래 github에 접속하자. 

 

https://github.com/Tencent/rapidjson

 

접속하면 아래와 같이 직접 zip 파일을 받던 clone을 하던 어떻게든 소스코드를 받는다. 

 

 

 

받고나면 include 라는 폴더가 보일텐데 다른 파일들은 사실상 필요없고 include/rapidjson 만 필요하다.

 

 

 

 

위와 같이 include/rapidjson 이 있는데 이 rapidjson 폴더를 통째로 복사해서 visual studio 프로젝트 안에 넣어준다. 

 

그렇게 하면 아래와 같이 구성이 될 것이다. 

 

 

 

 

이렇게 rapidjson을 프로젝트 안에 넣어줬는데 아직 한 단계가 더 남았다. 

 

아래와 같이 이동한다. 

 

프로젝트 우클릭 -> 속성 -> C/C++ -> 일반 -> 추가 포함 디렉토리 

 

이동하고 나면 아래와 같이 보일 것이다. 

 

 

 

 

자 그럼 여기서 추가 포함 디렉터리에 include/rapidjson 이라고 써준다. 

 

이렇게 하고 build 를 진행해보면 문제없이 잘 실행되는 것을 볼 수 있을 것이다. 

 

rapidjson 은 c++ 상에서 json 을 쓴다고 하면 거의 무조건 쓰는 표준같은 존재라고 한다. 사용법도 꽤나 간단하다. 

 

혹시나 지금 테스트해보고 있는 예제를 첨부하겠다. 위 과정대로만 따라하면 문제없이 동작하는 예제이다. 

 

#define RAPIDJSON_HAS_STDSTRING 1

#include <iostream>
#include <string>

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace rapidjson; 

int main() {
    // 1. JSON 문자열을 파싱해서 DOM 으로 구조화 한다.
    const std::string json = "{\"project\":\"rapidjson\",\"stars\":10}";
    Document d;
    d.Parse(json);

    // 2. DOM 내용을 변경한다.
    Value& s = d["stars"];
    s.SetInt(s.GetInt() + 1);

    // 3. DOM 내용을 다시 문자열로 변경한다.
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    d.Accept(writer);

    // 문자열을 다시 출력한다. {"project":"rapidjson","stars":11}
    std::cout << buffer.GetString() << std::endl;
}

 

아래 공식 홈페이지에서 사용법을 보는 것도 좋다.

 

https://miloyip.github.io/rapidjson/index.html

 

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. All rights reserved. Build status I

miloyip.github.io

 

반응형