根据百度的语音识别例子,展示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是节点的值。

生成后的效果就是

时间: 2024-08-05 22:38:12

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

根据百度的语音识别例子,展示C如何调用C++库

刚才无聊摆弄了一下百度的语音识别RestAPI,看到语音识别的Sample是用C++写的,一共有三个组件,libcurl.a.libjson.a.base64.cpp,在编译时出现Json::Reader未定义引用的错误.想着还是用C重写一下这个例子吧.RestAPI的调用方式是先用过SKey获得Token,然后把音频(例如:test.pcm)通过Base64编码成字符串附加到地址中,通过curl的方式post到语音识别平台,返回JSON获取音频结果.作者重写代码时json组件没有用libjso

百度Android语音识别SDK语义理解与解析方法

百度语义理解开放平台面向互联网开发者提供自然语言文本的解析服务,也就是可以根据文本的意图解析成相应的表示. 为了易于人阅读,同时也方便机器解析和生成,意图表示协议采用 json 语言进行描述,采用 gb18030 编码. json 语言的基本概念: 1.属性名/属性值 即键值对(key-value) 2.数组 在 json 中是"[]"括起来的内容,数据结构为 ["value1","value2",...],取值方式和所有语言中一样,使用索引获取

百度地图API,展示地图和添加控件

1.申请百度账号和AK 点我申请 2.准备页面 根据HTML标准,每一份HTML文档都应该声明正确的文档类型,我们建议您使用最新的符合HTML5规范的文档声明: <!DOCTYPE html> 3.适应移动端页面展示 下面我们添加一个meta标签,以便使您的页面更好的在移动平台上展示. <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 4.设置容器样式

一段讯飞、百度等语音识别API无法识别的语音最终解决办法

最近在做语音识别.字幕扒词相关的工作,遇到了一段录音(https://download.csdn.net/download/u014220286/12169183,各位有兴趣的可以下载下来试试),音质什么的和其他处理过的无二异,也是普通话,照常理说应该能识别出来,可为了类似这样的语音丢了工作机会(前一次没重视人工速录交了,后来又遇到了,琢磨了好长时间解决了,过了交稿时间,产生信任危机了,没有机会合作了.)记录下这次的解决过程,希望给你有需要的人帮助. 首先用ffmpeg查看该音频,发现是32是浮

c# 百度api语音识别

public static string getStrAccess(string para_API_key, string para_API_secret_key) { //方法参数说明: //para_API_key:API_key(你的KEY) //para_API_secret_key(你的SECRRET_KEY) //方法返回值说明: //百度认证口令码,access_token string access_html = null; string access_token = null;

百度地图和solr展示资源和附近等功能的实现 四

这章主要是定位功能,首先谈谈H5的定位,开始大部分的代码都是这个上面差不多https://www.cnblogs.com/lijuntao/p/6439596.html 但是第一步定位一直走不通, ie浏览器可以获取到定位的位置外,其他浏览器基本获取不到位置,https试过好像也不行,最后一朋友在国外试代码,结果可用,可怕啊,为啥不用百度地图自己的定位,可能是我技术不到位把,怎么也定位不准,也想过个种办法,最后还是放弃了,才用的H5定位, 开始用的ie测试的,效果蛮好,测试工程说,其他浏览器都不

AJax跨域请求百度音乐接口数据展示页面

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Music</title> 6 <script src="https://code.jquery.com/jquery.js"></script> 7 <!-- 引入 Bootstrap

Android采用Volley具体的例子展示完整的异步加载数据(一)

MainActivity例如下列: package cc.cn; import java.util.HashMap; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import com.android.volley.AuthFailureError; import com.android.volley.Reques

@classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数。下面的例子展示了它们的用法和行为:

class MyClass(object): def __init__(self): self._some_property = "properties are nice" self._some_other_property = "VERY nice" def normal_method(*args,**kwargs): print "calling normal_method({0},{1})".format(args,kwargs) @cla