科大讯飞语音转文字JSON数据的

  报名参加了一个创青春大学生创业大赛,需要把人机交互完善一下,就做了一个简单的语音交互界面。程序的大体思路是语音方面(包括文字转语音,语音转文字)调用科大讯飞的 SDK完成,智能方面(包括智能文字回复) ,程序不难,但是在json数据的解析方面花的时间有点长。

    json是非常常见的数据交换格式,以键值对的形式传输,比如:{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0.00,"w":"啊"}]},{"bg":0,"cw":[{"sc":0.00,"w":"啊"}]}]},这个是科大讯飞文字转语音的标准回复格式,要想把需要的文字提取出来,我们先来分析一下这个数据

{

"sn":1,

"ls":false,

"bg":0,

"ed":0,

"ws":

         [{ "bg":0, "cw":[{"sc":0.00,"w":"啊"}]},{"bg":0,"cw":[{"sc":0.00,"w":"啊"}] }]

}

分析后不难发现,我们需要的是ws里的数据,其余关键字里都是表示状态。麻烦的是ws 并不是具体的数据,而是json数组,可以理解为新的json。

现在把ws里的内容拿出来,继续分析:

  { "bg":0, "cw":[{"sc":0.00,"w":"啊"}]},

   {"bg":0,"cw":[{"sc":0.00,"w":"啊"}] }]

需要cw里的信息 ,同样是一个json数组,同样拿出来分析。


解析需要用到json的jar包gson,普通解析很简单,此处麻烦在于需要解析出来两次json数组,然后遍历分析。算法的思路是先通过关键字ws找到第一个json数组,然后遍历这个数组,通过关键字cw找到我们需要的的第二个数组,然后继续遍历,通过关键字w找到我们需要的信息。

代码如下: 


                      JsonParser parser=new JsonParser();  //创建JSON解析器
JsonObject object=(JsonObject) parser.parse(result.getResultString());  //创建JsonObject对象,如参为带解析的json数据

JsonArray wsArray=object.get("ws").getAsJsonArray();    //通过关键字ws得到最外层的json数组

                      //遍历这个数组
for(int i=0;i 
JsonArray cwArray = wsArray.get(i).getAsJsonObject().get("cw").getAsJsonArray();    //通过关键字cw得到第二个数组
for(int j = 0 ; j//标点符号不做处理
if(cwArray.get(j).getAsJsonObject().get("w").getAsString().equals("。")
|| cwArray.get(j).getAsJsonObject().get("w").getAsString().equals("!")
|| cwArray.get(j).getAsJsonObject().get("w").getAsString().equals("?")){
que = "" ;
 
}
else 
que = que + cwArray.get(j).getAsJsonObject().get("w").getAsString();           //  找到需要的字符串,拼出一句话
}
               
            }


里面具体的方法不懂的 对照gson的api文档。















                                                                                                                                                                                                                  





你可能感兴趣的:(科大讯飞语音转文字JSON数据的)