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;
}

おすすめ

転載: blog.csdn.net/lzl980111/article/details/113945357