20211113:解析cjson文件脚本

这篇博客介绍了CJSON库在创建和解析JSON数据方面的基本用法,提供了创建JSON对象并添加键值对的示例代码。同时,展示了如何从文件中读取JSON内容,并通过-sdkgetIntValFromJsonFile-函数获取特定路径下的值。博客还包含了读取文件和内存中解析JSON的辅助函数实现。
摘要由CSDN通过智能技术生成
cjson头文件和源文件:
https://download.csdn.net/download/m0_37576376/41173070
解析csjon文件内容举例:
用法一:
 cJSON *root = cJSON_CreateObject();
    cJSON_AddStringToObject(root, "cmd", "result");
    cJSON_AddNumberToObject(root, "status", 0);
    cJSON_AddStringToObject(root, "msg", "success");
    cJSON *data = cJSON_CreateObject();
    // featureId
    sprintf(featureIdStr, "%ld", featureId);
    cJSON_AddStringToObject(data, "featureId", featureIdStr);
    cJSON_AddItemToObject(root, "data", data);

    char* Body = cJSON_PrintUnformatted(root);

    cJSON_Delete(root);
用法二:
 	cJSON *data = cJSON_CreateObject();
    cJSON_AddStringToObject(data, "featureBase64", feature);
    cJSON_AddNumberToObject(data,"quality",quality);

     cJSON *rectObj = cJSON_CreateObject();
      cJSON_AddNumberToObject(rectObj, "x", rect.x);
      cJSON_AddNumberToObject(rectObj, "y", rect.y);
      cJSON_AddNumberToObject(rectObj, "w", rect.w);
      cJSON_AddNumberToObject(rectObj, "h", rect.h);
      cJSON_AddItemToObject(data, "rect", rectObj);

二、读取json文件:
{0”:111,
	"1":{
			"1.1":131,
		}
}

int sdkgetIntValFromJsonFile(char *buf, char *nameSub1, char *nameSub2,
                             char *nameSub3) {
  char name[256];
  int val = -1;
  cJSON *root, *pSub1, *pSub2, *pSub3;

  root = cJSON_Parse(buf);
  if (root == NULL) {
    // LOG(ERROR) << "cJSON_Parse err, buf:" << buf << std::endl;
    goto err;
  }

  if (nameSub1 == NULL) {
    // APP_ERR("nameSub1 is null");
    goto err;
  }

  strncpy(name, nameSub1, 256);
  pSub1 = cJSON_GetObjectItem(root, name);
  if (pSub1 == NULL) {
    // APP_ERR("get json failed, %s", name);
    goto err;
  }
  if (nameSub2 == NULL) {
    val = pSub1->valueint;
    goto err;
  }

  strncpy(name, nameSub2, 256);
  pSub2 = cJSON_GetObjectItem(pSub1, name);
  if (pSub2 == NULL) {
    // APP_ERR("get json failed, %s", name);
    goto err;
  }
  if (nameSub3 == NULL) {
    val = pSub2->valueint;
    goto err;
  }

  strncpy(name, nameSub3, 256);
  pSub3 = cJSON_GetObjectItem(pSub2, name);
  if (pSub3 == NULL) {
    // APP_ERR("get json failed, %s", name);
    goto err;
  }
  val = pSub3->valueint;

err:
  if (root != NULL) {
    cJSON_Delete(root);
  }

  return val;
}

static char *sdkreadFilejson(char *fileName) {
  int cfgSize;
  char *buf = NULL;

  FILE *fp = fopen(fileName, "rb");
  if (fp == NULL) {
    printf("fopen %s failed", fileName);
    goto err;
  }
  fseek(fp, 0L, SEEK_END);
  cfgSize = ftell(fp);
  fseek(fp, 0L, SEEK_SET);
  buf = (char *)malloc(cfgSize / 1024 * 1024 + 1024);
  if (buf == NULL) {
    // app_err("malloc %d failed", cfgSize);
    goto err;
  }
  memset(buf, 0, cfgSize / 1024 * 1024 + 1024);
  if (fread(buf, 1, cfgSize, fp)) {
  }

err:
  if (fp != NULL) {
    fclose(fp);
  }

  return buf;
}

int sdkgetIntVal(char *fileName, char *nameSub1, char *nameSub2,
                 char *nameSub3) {
  int val = -1;
  char *buf = sdkreadFilejson(fileName);
  if (buf != NULL) {
    val = sdkgetIntValFromJsonFile(buf, nameSub1, nameSub2, nameSub3);
    free(buf);
  } else {
    // app_warring("%s, readFile2Buf failed", fileName);
  }
  return val;
}
int sdkReadAlgConfig() {
  char *cfgFile = (char *)Face_Sdk_ParamPath;

  int modeltype = sdkgetIntVal(cfgFile, (char *)"1", "1.1", NULL);
  int workmode = sdkgetIntVal(cfgFile, (char *)"1", "1.1", NULL);
  int featureType = sdkgetIntVal(cfgFile, (char *)"1", "1.1", NULL);
  int qualityFlag = sdkgetIntVal(cfgFile, (char *)"1", "1.1", NULL);
  int minface = sdkgetIntVal(cfgFile, (char *)"1.1", "1.1", NULL);

  return 0;
}
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小帅之狗腿子

一条New_Worker

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值