How to install and use JsonCpp - JsonCpp 설치 및 사용
C, C++ 2019. 1. 8. 15:50 |JSON (JavaScript Object Notation)은 가벼운 data 교환 포멧이다. C++이 공식으로 지원하는 형식은 아니지만 분석에 사용 가능한 여러가지 라이브러리가 있다. 그 중 JsonCpp의 사용 방법이다.
홈페이지에서 소스를 다운 받고 압축을 풀면 아래와 같은 파일들이 나온다.
amalgamate.py를 실행한다.
dist라는 폴더에 소스파일과 헤더 파일이 생성된다.
makefiles - mscv2010 - jsoncpp.sln을 실행 한다.
Retarget Projects가 실행된다.
3개의 프로젝트가 나타난다.
각 프로젝트의 Property Pages - Configuration Properties - C/C++ - Code Generation - Runtime Library를 /MDd로 바꿔 준다.
Build 해 준다.
makefiles - msvc2010 - Debug 폴더에 lib_json.lib가 생성된다.
JsonCpp를 사용할 프로젝트를 만들고 Include Directory(jsoncpp-master\include)와 Library Directory(jsoncpp-master\makefiles\msvc2010\Debug)를 추가해 준다.
쓰기 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #pragma comment (lib, "lib_json.lib") #include <iostream> #include <fstream> #include "json/json.h" using namespace std; using namespace Json; int main() { ofstream json_file; json_file.open("JSON_DATA.json"); Value Computer; Computer["CPU"] = "I7"; Computer["RAM"] = "16G"; Value Language; Language["C++"] = "Visual Studio"; Language["Python"] = "IDLE"; Computer["Program"] = Language; Computer["HDD"] = "2TB"; Value Cable; Cable.append("Power"); Cable.append("Printer"); Cable.append("Mouse"); Computer["Computer"]["Cable"] = Cable; Value number; number["Int"] = 123; number["Double"] = 456.012; number["Bool"] = true; Computer["Computer"]["Number"] = number; StreamWriterBuilder builder; builder["commentStyle"] = "None"; builder["indentation"] = " "; // Tab unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); // 알파벳 순으로 write 된다. writer->write(Computer, &cout); writer->write(Computer, &json_file); cout << endl; // add lf and flush json_file.close(); return 0; } | cs |
아래와 같은 결과가 출력 된다.
같은 결과의 JSON_DATA.json 파일이 생성 된다.
읽기 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #pragma comment (lib, "lib_json.lib") #include <iostream> #include <fstream> #include "json/json.h" using namespace std; using namespace Json; int main() { ifstream json_dir("JSON_DATA.json"); CharReaderBuilder builder; builder["collectComments"] = false; Value value; JSONCPP_STRING errs; bool ok = parseFromStream(builder, json_dir, &value, &errs); if (ok == true) { cout << "CPU: " << value["CPU"] << endl; cout << "Program Python: " << value["Program"]["Python"] << endl; cout << "Computer Cable: " << value["Computer"]["Cable"] << endl; cout << "Computer Cable[0]: " << value["Computer"]["Cable"][0] << endl; cout << endl; cout << "Computer Number Int(as int): " << value["Computer"]["Number"].get("Int", -1).asInt() << endl; // "Int" 값이 없으면 -1 반환. cout << "Computer Number Int(as int): " << value["Computer"]["Number"]["Int"].asInt() << endl; // "Int" 값이 없으면 0 반환. cout << "Computer Number Double(as double): " << value["Computer"]["Number"].get("Double", -1).asDouble() << endl; // "Double" 값이 없으면 -1 반환. cout << "Computer Number Double(as string): " << value["Computer"]["Number"].get("Double", "Empty").asString() << endl; // "Double" 값이 없으면 Empty 반환. cout << "Computer Number Bool(as bool): " << value["Computer"]["Number"].get("Bool", false).asBool() << endl; // "Bool" 값이 없으면 false 반환. cout << endl; cout << "Root size: " << value.size() << endl; cout << "Program size: " << value["Program"].size() << endl; cout << "Computer Cable size: " << value["Computer"]["Cable"].size() << endl; cout << endl; int size = value["Computer"]["Cable"].size(); // size() 값을 for 문에서 그대로 비교하면 warning C4018가 발생 한다. for (int i = 0; i < size; i++) cout << "Computer Cable: " << value["Computer"]["Cable"][i] << endl; cout << endl; for (auto i : value["Computer"]["Cable"]) cout << "Computer Cable: " << i << endl; } else { cout << "Parse failed." << endl; } return 0; } | cs |
아래와 같은 결과가 출력 된다.
'C, C++' 카테고리의 다른 글
Qt 스프라이트 애니매이션 (0) | 2019.02.21 |
---|---|
Qt 설치 및 간단한 사용 예 (4) | 2019.01.16 |
Console 어플리케이션에 이미지 디스플레이 하기 (0) | 2018.11.22 |
Python C API (0) | 2018.11.21 |
MySQL C API (0) | 2018.11.20 |