반응형
boost 1.75 이전 버전은 json을 사용하기 위하여 property_tree를 사용하였습니다.
1.75 버전부터 json을 전문적으로 지원하는 boost.json라이브러리가 생겼습니다.
boost.json을 사용하는 Hello World입니다.
#include <boost/json.hpp>
#include <iostream>
#include <string>
using namespace boost;
using namespace std;
int main(int argc, char* argv[])
{
json::value jv = {
{ "Hello", "World" }
};
std::string str = json::serialize(jv);
cout << str << endl;
return 0;
}
참고로 기존 property_tree를 이용한 Hello World와 비교하여 보면 코드가 좀 더 JSON형태로 보입니다.
사용법은 Quick Look을 읽고 따라해보면 금방 익히실 수 있을 듯 보입니다.
전반적으로 테스트 해보니 아래와 같은 장점이 있는 듯 했습니다.
1. 코드가 좀 더 JSON형태로 보입니다. 예로 아래와 같은 코드가 가능합니다.
value jv = {
{ "pi", 3.141 },
{ "happy", true },
{ "name", "Boost" },
{ "nothing", nullptr },
{ "answer", {
{ "everything", 42 } } },
{"list", {1, 0, 2}},
{"object", {
{ "currency", "USD" },
{ "value", 42.99 }
} }
};
2. 객체와 JSON간의 변환이 아래와 같은 형태로 짧고 간결하게 가능합니다.
struct customer
{
int id;
std::string name;
bool current;
};
void tag_invoke(json::value_from_tag, json::value& jv, customer const& c)
{
jv = {
{ "id" , c.id },
{ "name", c.name },
{ "current", c.current }
};
}
customer tag_invoke(json::value_to_tag< customer >, json::value const& jv)
{
json::object const& obj = jv.as_object();
return customer{
json::value_to<int>(obj.at("id")),
json::value_to<std::string>(obj.at("name")),
json::value_to<bool>(obj.at("current"))
};
}
json::value jv = {
{ "id", 3 },
{ "name", "json" },
{ "current", true }
};
customer c(json::value_to<customer>(jv));
json::value jv2 = json::value_from(c);
단점으로는 관련 클래스를 사용할 때는 json 네임스페이스를 붙여서 사용해야 합니다. json 네임스페이스를 붙이지 않을 경우 std와 클래스 이름 충돌이 좀 많이 일어납니다.
반응형
'개발 라이브러리 & 툴' 카테고리의 다른 글
[MongoDB] C/C++ BSON 한글 문자열 입출력 (0) | 2021.11.20 |
---|---|
boost locale을 이용한 C++에서의 Multi Byte와 UTF8간의 문자열 변환 (0) | 2021.11.19 |
[MongoDB] Mongo C/C++ Driver 관련 자료 (0) | 2021.11.10 |
boost asio address from_string 사용시 주의할 점 (0) | 2021.10.25 |
C++ boost property_tree를 이용한 간단한 xml 파싱 예제 (0) | 2021.10.14 |
C++ boost json(property_tree) Hello World (0) | 2021.10.13 |
[MongoDB] 윈도우용 MongoDB C/C++ Driver 컴파일 및 인스톨 하기 (0) | 2021.10.07 |
C/C++ 병렬처리(멀티프로세스) 라이브러리 선택 (0) | 2021.10.03 |