目录结构:
content
|->main.cpp
|->test
| |->test.h
| |->test.cpp
|->json
| |->json.h
`->cfg.json
json文件:
//cfg.json
{
"config":
{
"item1":[
{
"input":"1",
"output":"2"
},{
"input":"3",
"output":"4"
}
],
"item2":[
{
"if":"5"
},{
"if":"6"
}
]
}
}
工程文件:
//test.h
#ifdef TEST_H_
#define TEST_H_
#include <string>
#include <vector>
using namespace std;
typedef struct LABEL_A {
string input;
string output;
} Label_A;
class test {
public:
test();
~test();
bool Run();
bool GetConfig();
string CombineItem();
private:
vector<Label_A> m_vecA;
vector<string> m_vecB;
};
#endif
//test.cpp
#include "test.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <json/json.h>
using namespace std;
const char* CONFIG_PATH = "./cfg.json";
test::test() {}
test::~test() {}
bool test::Run() {
string item,cmd;
if(!GetConfig()) {
cout << "error" << endl;
}
item = CombineItem();
if (item.empty()) {
cout << "error" << endl;
} else {
cout << "OK" << endl;
cout << "item--->" << item << endl;
}
return true;
}
bool test::GetConfig() {
ifstream ifs(CONFIG_PATH,ios::in);
ostringstream os;
string str;
if(ifs.is_open()) {
cout << "OK" << endl;
os << ifs.rdbuf();
str = os.str();
} else {
cout << "error" << endl;
return false;
}
ifs.close();
Json::Reader reader;
Json::Value root;
if(!reader.parse(str,root)) {
cout << "json load error" << endl;
return false;
}
for (int i = 0;i < root["config"]["item1"].size();i++) {
Label_A va;
va.input = root["config"]["item1"][i]["input"].asString();
va.output = root["config"]["item1"][i]["output"].asString();
m_vecA.push_back(va);
}
for (int i = 0;i < root["config"]["item2"].size();i++) {
m_vecB.push_back(root["config"]["item2"][i]["if"].asString());
}
cout << "----item1----" << endl;
for(int i = 0;i < m_vecA.size();i++) {
cout << m_vecA[i].input << "," << m_vecA[i].output << endl;
}
cout << "----item2----" << endl;
for(int i = 0;i < m_vecB.size();i++) {
cout << m_vecB[i] << endl;
}
return true;
}
string test::CombineItem() {
string item;
//item1
if (m_vecA.size()) {
item + " item1 : ";
for(int i = 0;i < m_vecA.size();i++) {
item += m_vecA[i].input + "-" + m_vecA[i].output;
if(i != m_vecA.size() - 1) {
item += ",";
}
}
}
//item1
if (m_vecB.size()) {
item + " item2 : ";
for(int i = 0;i < m_vecB.size();i++) {
item += m_vecB[i];
if(i != m_vecB.size() - 1) {
item += ",";
}
}
}
return item;
}
//main.cpp
#include "test/test.h"
int main() {
test t;
t.Run();
return 0;
}
结果:
#OK
#item---> item1 : 1-2,3-4 item2 : 5,6