c语言cJson数组生成与解析

时间:2024-03-06 17:29:15

1.生成 json

char*  CreatJsCustNo( BT_BNF_CUST *p, char *strPaperNO)
{
   cJSON  *pJsonArry,*pJsonsub;
   
   pJsonArry=cJSON_CreateArray();   /*创建数组*/
   cJSON_AddItemToArray(pJsonArry,pJsonsub=cJSON_CreateObject()); /* 给创建的数组增加对对象*/
   
   cJSON_AddStringToObject(pJsonsub, "PROV_BRANCH_NO","000002");      /* 给对象增加内容 */                   
   cJSON_AddStringToObject(pJsonsub, "SRC_SYS","UBPS");                                        
   cJSON_AddStringToObject(pJsonsub, "CUST_OAC_BRANCH_NO","120101");                                                         
   cJSON_AddStringToObject(pJsonsub, "ROLE","3");                 
   cJSON_AddStringToObject(pJsonsub, "IPSN_NO","1");                                            
   
   char * pp = cJSON_Print(pJsonArry);
   
   if(NULL == pp)
   {
      cJSON_Delete(pJsonArry);
      return NULL;
   }
   printf("bbbb\n");
   cJSON_Delete(pJsonArry);
   return pp;
}

2.解析

int ParseJsCustNo (char *strJson ,BT_BNF_CUST_RESP *p)
{
  cJSON * pJson,*pSub,*pSub1 ;
  int iCount=0;
  if(NULL == strJson)
  {
        return -1;
  }
  pJson = cJSON_Parse(strJson);  /* 解析 json 放入 pJson*/
  if(NULL == pJson)
  {
    return -1;
  }
  printf("传入=%s\n",cJSON_Print(pJson));
  
  iCount = cJSON_GetArraySize(pJson); /*获取数组长度*/
  
  printf("iCount=[%d]\n",iCount);
  
  pSub = cJSON_GetArrayItem(pJson,0);  /*目前按1笔处理,取出一笔放入 pSub */
  
  printf("数组里面的内容=%s\n",cJSON_Print(pSub));
  
  pSub1 = cJSON_GetObjectItem(pSub, "PARTY_ID");
  
  if(pSub1 != NULL)
  {  
     printf("---GET:PARTY_ID = [name:[%s]_type:[%d]_value:[%s] ]\n", pSub1->string,pSub1->type,pSub1->valuestring);
     strcpy(p->PARTY_ID,pSub1->valuestring  );                                  
  }
  pSub1 = cJSON_GetObjectItem(pSub, "CUST_NO");
  if(pSub1 != NULL)
  {  
     printf("---GET:CUST_NO = [name:[%s]_type:[%d]_value:[%s] ]\n", pSub1->string,pSub1->type,pSub1->valuestring);
     strcpy(p->CUST_NO,pSub1->valuestring  );                                  
  }
  pSub1 = cJSON_GetObjectItem(pSub, "PROV_BRANCH_NO");
  if(pSub1 != NULL)
  {  
     printf("---GET:PROV_BRANCH_NO = [name:[%s]_type:[%d]_value:[%s] ]\n", pSub1->string,pSub1->type,pSub1->valuestring);
     strcpy(p->PROV_BRANCH_NO,pSub1->valuestring  );                                  
  }

  cJSON_Delete(pJson);
  return 0;
}

 

结果类似如下:

生成:

[{
"PROV_BRANCH_NO": "000002",
"SRC_SYS": "UBPS",
}]

解析:

[{
"RelCode": "已有客户!",
"PROV_BRANCH_NO": "000002",
"SRC_SYS": "UBPS",
}]

 4.备注

1.创建Json。

/* feeType char 类型*/

cJSON_AddStringToObject(savingAccountFee, "feeType", feeType);

/* feeAmount int/double 类型 */
cJSON_AddNumberToObject(savingAccountFee, "feeAmount", feeAmount);

/*常用赋值函数*/

#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())

#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())

#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())

#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))

#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))

#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))

 

2.解析Json,不同类型,进行解析时,赋值方式。

    /* taxDeduct double 类型 */
    pLeaf =cJSON_GetObjectItem(pSub1, "taxDeduct");
    if(pLeaf != NULL)
    {
        printf("---GET:taxDeduct = [name:[%s]_type:[%d]_value:[%d] ]\n", pLeaf->string,pLeaf->type,pLeaf->valuedouble);
        p->endorsementResult.taxDeduct = pLeaf->valuedouble;
    }
    /* totalNum int 类型*/
    pLeaf = cJSON_GetObjectItem(pSub1, "totalNum");
    if(pLeaf != NULL)
    {
         p->total.totalNum = pLeaf->valueint;
    }
    /*companyCode char 类型*/
    pLeaf = cJSON_GetObjectItem(pSub1, "companyCode");
    if(pLeaf != NULL)
    {
        strcpy(p->total.companyCode , pLeaf->valuestring);
    }