根據百度的語音辨識例子,展示C如何使用cJSON

來源:互聯網
上載者:User

標籤:

前面一篇文章展示了根據百度語音辨識例子如何用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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.