土豆大布丁 2021-06-06 23:50 采纳率: 57.1%
浏览 276
已结题

C语言解析json数组,怎么解析这个json字符串中的数组最好用cjson

{"msg":"caozuochenggong","data":"[{\"picurl\":\"http://baidu\",\"name\":\"zhangshan\"},{\"picurl\":\"http://baidu\",\"name\":\"zhangshan\"}]","success":1}   

data对应的数据,这个数组,数组长度不确定被弄成了字符串,该怎么 获取数组长度,和每个数据对应的值

  • 写回答

4条回答 默认 最新

  • 小P聊技术 2021-06-09 12:38
    关注
    
    #include <stdio.h>
    #include <cJSON.h>
    int main(){
    char* json_string =\ 
    //用char* 模拟一个JSON字符串
    “{”,\
     "test_1":"1",\
     "test_2":"2",\
     "test_arr":"[{",\
    "{",\
      "test_1":"arr_1",\
      "test_2":"arr_2",\
      "test_3":"arr_3",\
    "}",\
    "{"\
     "test_1":"1",\
     "test_2":"2",\
     "test_3":"3",\
    "}",\
    "}]",\
    "test_3" :"3",\
    "}"//json_arr string;
     
    //第一步打包JSON字符串
    cJSON* cjson = cJSON_Parse(json_arr_string);
     
    //判断是否打包成功
    if(cjson == NULL){
    printf("cjson error…")
    }
    else{//打包成功调用cJSON_Print打印输出
    cJSON_Print(cjson);
    }
     
    //获取数组对象
    cJSON* test_arr = cJSON_GetObjectltem(cjson,"test_arr");
     
    //获取数组对象个数便于循环
    int arr_size = cJSON_GetArraySize(test_arr);//return arr_size 2
     
    //获取test_arr数组对象孩子节点
    cJSON* arr_item = test_arr->child;//子对象
     
    //循环获取数组下每个字段的值并使用cJSON_Print打印
    for(int i = 0;i <=(arr_size-1)/*0*/;++i){
    cJSON_Print(cJSON_GetObjectItem(arr_item,"test_1"));
    cJSON_Print(cJSON_GetObjectItem(arr_item,"test_2"));
    cJSON_Print(cJSON_GetObjectItem(arr_item,"test_3"));
    arr_item = arr_item->next;//下一个子对象
    }
     
    //delete cjson 这里只需要释放cjson即可,因为其它的都指向它
    cJSON_Delete(cjson);
    评论

报告相同问题?

悬赏问题

  • ¥15 Mplus跑出来的数据只有原数据的一半
  • ¥15 vue项目添加全局处理解决一些开发问题
  • ¥40 微信小程序前后端交互
  • ¥15 linux安装依赖问题
  • ¥50 数据预处理(大量数据)
  • ¥15 多设备数据融合可视化显示控制
  • ¥15 公众号关键词自动回复超链接
  • ¥18 help me! 希望大家来看看 吉~
  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错