常用函数
获取一个字符串值
char *mg_json_get_str(struct mg_str json, const char *path)
获取一个bool值
bool mg_json_get_bool(struct mg_str json, const char *path, bool *v)
获取一个浮点数
bool mg_json_get_num(struct mg_str json, const char *path, double *v)
获取一个整形
long mg_json_get_long(struct mg_str json, const char *path, long dflt)
获取一个json子串
备注:toklen是子串的长度,返回值是子串开始位置
int mg_json_get(struct mg_str json, const char *path, int *toklen)
关于path描述
就是json子key的描述,以”$”开头,以.分割 下面举例
{
"code": 200,
"reason": "success",
"data": {
"targetList": [
{
"ips": "172.20.52.10-172.20.54.20",
"ports": "0-65535",
},
{
"ips": "172.20.52.10-172.20.54.20",
"ports": "0-65535",
}
],
"processList": [
"chrome.exe",
"edge.exe"
],
"serverUrl": "172.20.50.126:8080"
}
}
1、获取一个string类型值
auto serverUrl = mg_json_get_str(json_root, "$.data.serverUrl");
2、获取ips
//第一个
auto serverUrl = mg_json_get_str(json_root, "$.data.targetList[0].ips");
//第二个
auto serverUrl = mg_json_get_str(json_root, "$.data.targetList[1].ips");
mg_json没有直接获json数组对象个数,可以通过以下类似的代码枚举所有数组元素
//获取processList
for (int i = 0; i < 100; i++)
{
char js_path[100];
sprintf(js_path, "$.data.processList[%d]", i);
auto value = mg_json_get_str(json_root, js_path);
if (value)
{
_trace("%s:%s\n", js_path, value);
CA2W wstr(value);
m_driver_config.m_exe_name_list.push_back(wstr.m_psz);
}
else
{
break;
}
}
good!!!