首页 > 代码库 > 根据百度的语音识别例子,展示C如何使用cJSON

根据百度的语音识别例子,展示C如何使用cJSON

前面一篇文章展示了根据百度语音识别例子如何用C调用C++的方法,这篇文章也是基于百度语音识别,展示如何使用cJSON,cJSON是一个用C写的JSON解析器,非常好用,可以用它来生成一个JSON,也可以用来解析JSON的值。

在我写的通过skey获取token的代码中


char *token = (char *)malloc(MAX_BUFFER_SIZE);

    char host[MAX_BUFFER_SIZE];

    snprintf(host, sizeof(host),

             "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s",

             apiKey, secretKey);

    FILE *fpp = NULL;

    char cmd[MAX_BUFFER_SIZE];

    char *result = (char *)malloc(MAX_RESULT_SIZE);

    char *curl_cmd = "curl -s ";

    char *yinhao = "\"";

    strcpy(cmd, curl_cmd);

    strcat(cmd, yinhao);

    strcat(cmd, host);

    strcat(cmd, yinhao);

    fpp = popen(cmd, "r");

    printf("\n%s\n", cmd);

    fgets(result, MAX_RESULT_SIZE, fpp);

    pclose(fpp);

 

    if (result != NULL)

    {

        cJSON *root;

        root = cJSON_Parse(result);

        if (!root)

        {

            printf("\nGet root Failed");

            return -1;

        }

        token1 = cJSON_GetObjectItem(root, "access_token")->valuestring;

        strcpy(token, token1);

        printf("\n%s\n", token);

        cJSON_Delete(root);

        free(result);

    }


result是JSON结果,得到JSON后如何取得各节点的值呢?就需要用到if(result!=NULL)里的代码了,首先cJSON先定义一个root节点 cJSON *root,然后通过cJSON_Parse获得根节点,有根节点的话,就通过cJSON_GetObjectItem(root,"access_token")获取根下面的一级的access_token的值,它的JSON结构是这样

{

    access_tokeen:XXXXXX,

    len:XXXXXXX

}

,用完后要cJSON_Delete。

 

百度语音识别post的时候提交的是json,所以需要组装一个json,组装的代码如下:


    cJSON *buffer;

    buffer = cJSON_CreateObject();

    cJSON_AddItemToObject(buffer, "format", cJSON_CreateString("pcm"));

    cJSON_AddItemToObject(buffer, "rate", cJSON_CreateString("8000"));

    cJSON_AddItemToObject(buffer, "channel", cJSON_CreateString("1"));

    cJSON_AddItemToObject(buffer, "token", cJSON_CreateString(token));

    cJSON_AddItemToObject(buffer, "cuid", cJSON_CreateString(cuid));

    cJSON_AddItemToObject(buffer, "len",                            cJSON_CreateString(content_length));

    cJSON_AddItemToObject(buffer, "speech", cJSON_CreateString(decode_data));


通过cJSON_CreateObject来撞见一个对象,然后通过cJSON_AddItemToObject往对象里添加节点,cJSON_AddItemToObject(buffer, "format", cJSON_CreateString("pcm")); format是节点名称,pcm是节点的值。

生成后的效果就是

技术分享

根据百度的语音识别例子,展示C如何使用cJSON