1. 程式人生 > >科大訊飛語音轉文字JSON資料的

科大訊飛語音轉文字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<wsArray.size();i++){
 
JsonArray cwArray = wsArray.get(i).getAsJsonObject().get("cw").getAsJsonArray();    //通過關鍵字cw得到第二個陣列
for(int j = 0 ; j<cwArray.size() ; 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文件。