Json记录
C++ Json配置
sudo apt install libjsoncpp-dev
读操作
#include <jsoncpp/json/json.h>
std::string Arm_Device = "on",Plate_Device = "on",Video_Device = "on";
std::string Lidar_Device = "on",Switch_Device = "on";
std::string CAM_FRONT_IP="192.168.2.55",CAM_MIDDLE_IP="192.168.2.54",CAM_BACK_IP="192.168.2.53";
std::string Recv_IP = "172.8.3.16",Send_IP = "172.8.3.04",Send_Port="4002";
void readDataFromJson()
{
Json::Reader reader;/*用于按照JSON数据格式进行解析*/
Json::Value root;/*用于保存JSON类型的一段数据*/
ifstream srcFile("./warning.json", ios::binary);/*定义一个ifstream流对象,与文件demo.json进行关联*/
if (!srcFile.is_open())
{
printf("Fail to open src.json\n");
return;
}
/*将demo.json数据解析到根节点root*/
if (reader.parse(srcFile, root))
{
/*读取根节点信息*/
Arm_Device = root["Arm"].asString();
Plate_Device= root["Plate"].asString();
Lidar_Device = root["Lidar"].asString();
Video_Device = root["Video"].asString();
Switch_Device = root["Switch"].asString();
Recv_IP = root["Recv_IP"].asString();
Send_IP = root["Send_IP"].asString();
Send_Port = root["Send_Port"].asString();
if(Switch_Device == "on")
{
CAM_FRONT_IP = root["SwitchClass"][0]["CAM_FRONT_IP"].asString();
CAM_MIDDLE_IP = root["SwitchClass"][0]["CAM_MIDDLE_IP"].asString();
CAM_BACK_IP = root["SwitchClass"][0]["CAM_BACK_IP"].asString();
}
else
{
CAM_FRONT_IP = root["SwitchClass"][1]["CAM_FRONT_IP"].asString();
CAM_MIDDLE_IP = root["SwitchClass"][1]["CAM_MIDDLE_IP"].asString();
CAM_BACK_IP = root["SwitchClass"][1]["CAM_BACK_IP"].asString();
}
// printf("Arm:%s\nPlate:%s\nVideo:%s\n",Arm_Device.c_str(),Plate_Device.c_str(),Video_Device.c_str());
// printf("%s\n%s\n%s\n",Front.c_str(),Middle.c_str(),Back.c_str());
}
srcFile.close();
}
上述读取的warning.json文件信息(配置开关)
{
"Arm" : "on",
"Lidar" : "on",
"Plate" : "on",
"SwitchClass" : [
{
"CAM_BACK_IP" : "192.168.3.66",
"CAM_FRONT_IP" : "192.168.3.64",
"CAM_MIDDLE_IP" : "192.168.3.65"
},
{
"CAM_BACK_IP" : "192.168.6.66",
"CAM_FRONT_IP" : "192.168.4.64",
"CAM_MIDDLE_IP" : "192.168.5.65"
}
],
"Switch" : "on",
"Video" : "on",
"Recv_IP" : "172.16.3.104",
"Send_IP" : "172.16.3.102",
"Send_Port" : "6001"
}
写操作
#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
#include <fstream>
using namespace std;
void writeDataToJson()
{
Json::Value root;/*JSON文件的根节点*/
/*根节点的属性*/
root["Arm"] = Json::Value("on");
root["Lidar"] = Json::Value("on");
root["Plate"] = Json::Value("on");
/*数组形式*/
root["Combine"].append("tea");
root["Combine"].append("coffee");
root["Combine"].append("milk");
Json::Value branch1,branch2;
branch1["Switch"]=Json::Value("on");
branch1["Video"]=Json::Value("on");
branch2["Recv_IP"]=Json::Value("192.168.7.2");
branch2["Send_IP"]=Json::Value("192.168.7.3");
/*将子节点挂在根节点上*/
root["Config"].append(branch1);
root["Config"].append(branch2);
/*缩进输出到终端*/
Json::StyledWriter sw;
cout << sw.write(root) << endl << endl;
/*输出到JSON文件*/
ofstream desFile("../des.json", std::ios::out | std::ios::app);
if (!desFile.is_open())
{
cout << "Fail to pen des.jons";
return;
}
desFile << sw.write(root);
desFile.close();
}
字符串转换Json(UTF-8编码)
std::string transformJSON(int isPark,int isObstacles,int isVehicle,int isPlate,std::string plate_number,std::string color_STR,int isOne2Port,float score)
{
// utf-8 编码
static Json::Value def = []() {
Json::Value def;
Json::StreamWriterBuilder::setDefaults(&def);
def["emitUTF8"] = true;
return def;
}();
Json::Value root;
std::string jsonString;
root["isPark"]=isPark;
root["isObstacles"]=isObstacles;
root["isVehicle"]=isVehicle;
root["isPlate"]=isPlate;
root["plate_number"]=plate_number;
root["color_STR"]=color_STR;
root["isOne2Port"]=isOne2Port;
root["score"]=score;
std::ostringstream stream;
Json::StreamWriterBuilder stream_builder;
stream_builder.settings_ = def;//Config emitUTF8
std::unique_ptr<Json::StreamWriter> writer(stream_builder.newStreamWriter());
writer->write(root, &stream);
return stream.str();
}
python版本
import json
def toJSon(isVehicle,isPark,isObstacles,isPlate,plate_number,plate_score,color_STR,isOne2Port):
root = dict()
root["isPark"]=isPark;
root["isObstacles"]=isObstacles;
root["isVehicle"]=isVehicle;
root["isPlate"]=isPlate;
root["plate_number"]=plate_number;
root["color_STR"]=color_STR;
root["isOne2Port"]=isOne2Port;
root["score"]=plate_score;
final=json.dumps(root,ensure_ascii=False,indent=4)
return final