* 왜 jsoncpp를 선택했을까 ?
앞서 C++ Rest SDK (code명 Casablanca)의 web::json::value를 사용하여 JSON을 활용하는 방법을 설명한 적이 있습니다.
http://devluna.blogspot.kr/2015/05/webjsonvalue-c-rest-sdk.html
cpprestsdk의 경우 Github에서 full source 를 받을 수 있습니다.
https://github.com/Microsoft/cpprestsdk
build 하기 위해서는 openSSL, boost 를 받아야 합니다.
openSSL, boost를 바뀌는 개발툴에 따라 빌드하는 일이 쉽지는 않습니다.
Visual Studio에서는 nuget pacakge를 이용하여 쉽게 설치가 가능하지만,
그 역시도 개발Tool이 바뀔때마다 해야할 작업이 많습니다.
그래서 괜찮은 JSON Parser가 없나 찾아보다가 jsoncpp 를 발견하였습니다.
jsoncpp 는 .cpp 파일 1개와 .h 파일 2개 총 3개의 file을 project에 추가하면 되므로 별도의 .lib 생성 작업을 할 필요가 없습니다.
* jsoncpp 설치
먼저 jsoncpp의 최신버전을 다운 받습니다.
https://github.com/open-source-parsers/jsoncpp
저는 .zip 파일로 다운을 받아서 압축을 풀었습니다.
압축을 푼 폴더의 readme.md 파일을 읽어보면 amalgamate.py 파일을 이용하여 file 생성하는 방법이 설명되어 있습니다.
python amalgamate.py
Python이 설치되지 않았다면 Python 2.6 이상 버전을 다운받아서 설치하면 됩니다.
아래 Link에 설치방법이 설명되어 있습니다.
http://devluna.blogspot.kr/2015/07/python-00.html
dist 폴더 아래에 3개의 파일이 생성되었다는 메세지가 출력되었습니다.
해당 파일들을 복사해서 작업중인 폴더에 복사하시면 됩니다.
* JSON 생성
Json::Value 타입이 JSON document가 됩니다.
값을 입력하는 방법은 인덱스 연산자 [ ] 안에 key를 입력하고 value를 대입하면 됩니다.
배열 형태의 값은 .append() 라는 메서드를 이용합니다.
내부에 다른 JSON document를 넣을 경우에는 연산자 [ ] 안에 key를 입력하고 Json::Value를 대입하면 됩니다.
Json::Value의 값을 출력하고자 할때는 Json::StyledWriter를 이용하면 됩니다.
예제를 보시면 쉽게 이해가 될 것입니다.
그 결과 생성된 JSON 은 다음과 같습니다.
* JSON Parsing
jsoncpp는 cpprestsdk에 비해서 훨씬 더 강력하고 편리한 기능들을 제공해줍니다.
Json::Reader 를 이용하여 string 으로 된 JSON 을 parsing 하여 Json:;Value 객체 생성이 가능합니다.
.getMemberNames() 메서드를 이용하여 document 내의 key들을 vector<std::string> 로 return이 가능합니다. (cpprestsdk에는 없는 기능이었습니다)
나머지는 cpprestsdk 와 비슷합니다.
.is타입명() 메서드로 타입 확인이 가능하며 .as타입명() 으로 value 값을 받을 수 있습니다.
아래 예제에는 설명이 없지만, .type() 함수를 이용해서 타입을 return 받을 수도 있습니다.
(타입은 enum 형식으로 정의되어 있습니다.)
예제를 살펴보겠습니다.
예제에서의 str은 위에서 생성한 string을 그대로 이용했습니다.
좋은 정보 감사합니다.
답글삭제좋은 공부를 하기 위해 한번 필사를 해봤는데 나중에 또 참고할 수 있도록 해보겠습니다.
수고하십시오.