cheliequan
2023-01-17 62f8f9e4ee066ecb562de7969180a07cb3d41f57
增加根据protobuf转json函数
template <class T>
bool bus_dbapi_get_json( T &list, string &json)
5个文件已修改
164 ■■■■■ 已修改文件
camera.cpp 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dbapi.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.cpp 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
util.h 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
camera.cpp
@@ -68,4 +68,12 @@
    params.clear();
    return ret;
}
}
bool dbapi_get_json_by_cameralist(std::vector<protomsg::Camera> &list, string &json) {
    bool ret = bus_dbapi_get_json(list, json);
    return ret;
}
dbapi.h
@@ -27,4 +27,6 @@
bool dbapi_get_polygons(void *handle, std::vector<protomsg::CameraPolygon> &list);
bool dbapi_get_polygon_relations(void *handle, std::vector<protomsg::CameraPolygonRelation> &list);
bool dbapi_get_server_get_is_sys_expired(void *handle);
bool dbapi_get_json_by_cameralist(std::vector<protomsg::Camera> &list, string &json);
#endif
main.cpp
@@ -64,5 +64,125 @@
        }
    }
    string json;
    dbapi_get_json_by_cameralist(list, json);
    printf("Camera list to json:%s\n", json.c_str());
    /* [
    {
        "addr": "财务室",
        "alias": "",
        "brand": "",
        "coordTransform": "",
        "floor": -9999,
        "id": "2bdee058-43d9-4e95-9ba1-2f56920f6d7c",
        "ip": "",
        "is_running": false,
        "latitude": 0,
        "linkCams": null,
        "longitude": 0,
        "name": "5.152(财务室)",
        "password": "",
        "port": 0,
        "reserved": "",
        "resolution_height": 0,
        "resolution_width": 0,
        "rtsp": "rtsp://admin:a1234567@192.168.5.152:554/h264/ch1/main/av_stream",
        "runServerName": "189服务",
        "run_enable": false,
        "run_server_id": "DSVAD010120190703",
        "run_type": -1,
        "snapshot_url": "192.168.20.189:6700/71,1c82608f5aab92?collection=DSVAD010120190703-persistent",
        "status": -2,
        "tasks": [
            {
                "hasRule": true,
                "taskname": "离岗"
            }
        ],
        "type": 0,
        "username": "",
        "voiceEnable": false,
        "voiceId": ""
    },
    {
        "addr": "产品旁2",
        "alias": "",
        "brand": "",
        "coordTransform": "",
        "floor": -9999,
        "id": "d05618a4-7cdd-4b64-888c-2b1c29d3f32a",
        "ip": "",
        "is_running": false,
        "latitude": 0,
        "linkCams": null,
        "longitude": 0,
        "name": "5.151(产品旁)",
        "password": "",
        "port": 0,
        "reserved": "",
        "resolution_height": 0,
        "resolution_width": 0,
        "rtsp": "rtsp://admin:a1234567@192.168.5.151:554/h265/ch1/main/av_stream",
        "runServerName": "189服务",
        "run_enable": false,
        "run_server_id": "DSVAD010120190703",
        "run_type": -1,
        "snapshot_url": "192.168.20.189:6700/72,1c9ea52ffe3560?collection=DSVAD010120190703-persistent",
        "status": -2,
        "tasks": [
            {
                "hasRule": true,
                "taskname": "入侵"
            },
            {
                "hasRule": true,
                "taskname": "产品区域人员离岗"
            },
            {
                "hasRule": true,
                "taskname": "脱岗"
            }
        ],
        "type": 0,
        "username": "",
        "voiceEnable": false,
        "voiceId": ""
    },
    {
        "addr": "渣油装车10号",
        "alias": "",
        "brand": "",
        "coordTransform": "",
        "floor": -9999,
        "id": "8be6055f-639c-4ea0-bcec-99b6b5b95499",
        "ip": "",
        "is_running": false,
        "latitude": 0,
        "linkCams": null,
        "longitude": 0,
        "name": "渣油装车10号",
        "password": "",
        "port": 0,
        "reserved": "",
        "resolution_height": 0,
        "resolution_width": 0,
        "rtsp": "rtsp://admin:a1234567@192.168.5.53:554/h264/ch1/main/av_stream",
        "runServerName": "189服务",
        "run_enable": true,
        "run_server_id": "DSVAD010120190703",
        "run_type": -1,
        "snapshot_url": "192.168.20.189:6700/72,1c8f82b46690a6?collection=DSVAD010120190703-persistent",
        "status": -2,
        "tasks": null,
        "type": 0,
        "username": "",
        "voiceEnable": false,
        "voiceId": ""
    }
]*/
    return 0;
}
util.cpp
@@ -32,7 +32,7 @@
bool proto_to_json(const google::protobuf::Message &message, std::string &json) {
    google::protobuf::util::JsonPrintOptions options;
    options.add_whitespace = true;
    options.add_whitespace = false;
    options.always_print_primitive_fields = true;
    options.preserve_proto_field_names = true;
util.h
@@ -38,6 +38,36 @@
bool bus_dbapi_get_str(void *handle, const char *topic, char **pptr_str);
int get_value_by_key(char *json, const char *key, char **pptr_data);
template <class T>
bool bus_dbapi_get_json( T &list, string &json)
{
    using TMPT = typename std::remove_reference<decltype(*list.begin())>::type;
    TMPT t;
    string jsonString;
    int len = list.size();
    bRet = false;
    jsonString += "[";
    for ( int i= 0 ; i < len ; i++ )
    {
         string tmpjsonString;
        bRet = proto_to_json(list[i], tmpjsonString);
        if ( (len > 1) &&(i < len - 1))
        {
            tmpjsonString += ",";
        }
        jsonString += tmpjsonString;
    }
    jsonString += "]";
    json = jsonString;
}
template <class T>
bool bus_dbapi_get_list(char *json, const char *flag_key, const char *data_key, T &list) {
    char *ptr_value = NULL;