cgic解析传递复杂数据结构(对象数组、数组)

cgic解析传递对象数组

传递数据结构如下:

data:[
            {
                start:1,
                end:2,
                topic:"topic1",
                label:"label1",
                length:2,
                enum:[
                    {
                        value:1,
                        text:"关"
                    },  
                    {   
                        value:2,
                        text:"开"
                    }
                ]
            },{
                start:1,
                end:2,
                topic:"topic2",
                label:"label2",
                length:2,
                enum:[
                    {
                        value:1,
                        text:"关"
                    },  
                    {   
                        value:2,
                        text:"开"
                    }
                ]
            }
      ],
length:2

        

前端通过POST传递的形式如下:

$.ajax({
        type: "POST",
        data: {
            data:[
            {
                start:1,
                end:2,
                topic:"topic1",
                label:"label1",
                length:2,
                enum:[
                    {
                        value:1,
                        text:"关"
                    },  
                    {   
                        value:2,
                        text:"开"
                    }
                ]
            },{
                start:1,
                end:2,
                topic:"topic2",
                label:"label2",
                length:2,
                enum:[
                    {
                        value:1,
                        text:"关"
                    },  
                    {   
                        value:2,
                        text:"开"
                    }
                ]
            }],
            length:2
        },
        url: "./cgi/tt.cgi",
        success: function (data) {
            console.log(data)
        }
    });

在这里插入图片描述

/**
 * @brief   解析 标准的post请求的enum 部分
 * @note    
 *
 * @param   enum_item_arr 输出参数 承载解析完成的枚举数组
 * @retval  
 */
int32_t rwg_parse_enum(cJSON *enum_item_arr){

	uint32_t length;
	uint32_t i;
	uint32_t j;
	uint32_t enum_len;
	uint32_t start;
	uint32_t end;
	char key[256];
	char value[256];
	cgiFormResultType cgi_form_result;
	cJSON *item;
	cJSON *enum_arr;
	cJSON *enum_item;
	
	cgi_form_result = cgiFormInteger("length",&length,0);
    if (cgi_form_result != cgiFormSuccess){
        rwg_write_log("length reception failed,identification code:%d\n",cgi_form_result);
		return -1;
    }
    rwg_write_log("length :%d\n",length);
	for(i = 0; i < length; i++){
		item = cJSON_CreateObject();
		enum_arr = cJSON_CreateArray();
		cJSON_AddNumberToObject(item,"count",length);
		
		memset(key,0,256);
		sprintf(key,"data[%d][length]",i);
		cgi_form_result=cgiFormInteger(key,&enum_len,0);
		if (cgi_form_result != cgiFormSuccess){
			rwg_write_log("%s reception failed,identification code:%d\n",key,cgi_form_result);
			return -1;
		}
        rwg_write_log("%s :%d\n",key,enum_len);
        
		for(j = 0; j < enum_len; j++){
			enum_item = cJSON_CreateObject();
			memset(key,0,256);
			sprintf(key,"data[%d][enum][%d][value]",i,j);
			cgi_form_result=cgiFormString(key,value,256);
			if (cgi_form_result != cgiFormSuccess){
				rwg_write_log("%s reception failed,identification code:%d\n",key,cgi_form_result);
				return -1;
			}
			cJSON_AddStringToObject(enum_item,"value",value);

			memset(key,0,256);
			sprintf(key,"data[%d][enum][%d][text]",i,j);
			cgi_form_result=cgiFormString(key,value,256);
			if (cgi_form_result != cgiFormSuccess){
				rwg_write_log("%s reception failed,identification code:%d\n",key,cgi_form_result);
				return -1;
			}
			cJSON_AddStringToObject(enum_item,"text",value);
            cJSON_AddItemToArray(enum_arr,enum_item);
		}
        cJSON_AddItemToObject(item,"enum",enum_arr);
        cJSON_AddItemToArray(enum_item_arr,item);
	}
}

数组

nt32_t ret;
char **tt;

/**
 * @brief   接收前台传参的处理。
 * @note    
 *
 * @param   
 * @retval  参数信息有效返回0,否则返回错误码
 */
int32_t rwg_get_request_params()
{
    cgiFormResultType cgi_form_result;

    cgi_form_result=cgiFormStringMultiple("data[]",&tt);
    if (cgi_form_result != cgiFormSuccess){
        rwg_write_log("data reception failed,identification code:%d\n",cgi_form_result);
        goto fault;
    }

    return cgi_form_result;
fault:
	rwg_write_log("reception failed,identification code:%d\n",cgi_form_result);
	return cgi_form_result;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值