2014-09-28 58 views
0

我有以下代碼發送一個FLAC文件到谷歌。解析谷歌語音API v2結果在C#

FileStream fileStream = File.OpenRead("G:\\hell.flac"); 
      MemoryStream memoryStream = new MemoryStream(); 
      memoryStream.SetLength(fileStream.Length); 
      fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length); 
      byte[] BA_AudioFile = memoryStream.GetBuffer(); 
      HttpWebRequest _HWR_SpeechToText = null; 
      _HWR_SpeechToText = (HttpWebRequest)HttpWebRequest.Create("https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key="+key); 
      _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials; 
      _HWR_SpeechToText.Method = "POST"; 
      _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100"; 
      _HWR_SpeechToText.ContentLength = BA_AudioFile.Length; 
      Stream stream = _HWR_SpeechToText.GetRequestStream(); 
      stream.Write(BA_AudioFile, 0, BA_AudioFile.Length); 
      stream.Close(); 
      String text = ""; 
      HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse(); 

       StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream()); 
       Console.WriteLine(SR_Response.ReadToEnd()); 

輸出出來是.....

{"result":[]} 
{"result":[{"alternative":[{"transcript":"good morning google good morning google","confidence":0.81179827},{"transcript":"goodmorning google good morning google"}],"final":true}],"result_index":0} 

我如何解析這個並得到正確的文本。 ?? 請幫忙

+0

你正在尋找一個JSON解析器。 – SLaks 2014-09-28 01:51:46

+0

是的。我正在尋找一個解析器。 – user3811300 2014-09-28 02:00:27

+0

https://www.google.com/search?q=c%23+json+parser – SLaks 2014-09-28 02:02:07

回答

1

你需要解析你的JSON。示例代碼,從MSDN採取:

DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(User)); 
User user = (User)serializer.ReadObject(responseStream); 

bool isMember = user.IsMember; 
string name = user.Name; 
int age = user.Age; 
2

您可以使用Json.Net解析的結果,只是記住,在谷歌語音API,每一行是一個有效的JSON而不是整個的反應,因此我們應分拆首先結果

 //Speech API response here 
     var result = 
      "{\"result\":[]}\n{\"result\":[{\"alternative\":[{\"transcript\":\"good morning Google how are you feeling today\",\"confidence\":0.93832707},{\"transcript\":\"goodmorning Google how are you feeling today\"},{\"transcript\":\"Good Morning Google how are you feeling today\"},{\"transcript\":\"good mornin Google how are you feeling today\"},{\"transcript\":\"good mourning Google how are you feeling today\"}],\"final\":true}],\"result_index\":0}\n"; 

     var jsons = result.Split('\n'); 

     foreach (var j in jsons) 
     { 
      dynamic jsonObject = JsonConvert.DeserializeObject(j); 
      if (jsonObject == null || jsonObject.result.Count <= 0) continue; 

      var text = jsonObject.result[0].alternative[0].transcript; 
      Console.WriteLine(text); 
     } 

或者,我們可以在一個更靜態的方式做到這一點:

public class SpeechAlternative 
    { 
     public string Transcript { get; set; } 
     public double Confidence { get; set; } 
    } 

    public class SpeechResult 
    { 
     public SpeechAlternative[] Alternative { get; set; } 
     public bool Final { get; set; } 
    } 

    public class SpeechResponse 
    { 
     public SpeechResult[] Result { get; set; } 
     public int Result_Index { get; set; } 
    } 

解析部分是不是真的不同:

var result = 
        "{\"result\":[]}\n{\"result\":[{\"alternative\":[{\"transcript\":\"good morning Google how are you feeling today\",\"confidence\":0.93832707},{\"transcript\":\"goodmorning Google how are you feeling today\"},{\"transcript\":\"Good Morning Google how are you feeling today\"},{\"transcript\":\"good mornin Google how are you feeling today\"},{\"transcript\":\"good mourning Google how are you feeling today\"}],\"final\":true}],\"result_index\":0}\n"; 

       var jsons = result.Split('\n'); 


       foreach (var j in jsons) 
       { 
        var jsonObject = JsonConvert.DeserializeObject<SpeechResponse>(j); 
        if (jsonObject == null || jsonObject.Result.Length <= 0) continue; 

        var text = jsonObject.Result[0].Alternative[0].Transcript; 
        Console.WriteLine(text); 
       } 
+0

謝謝你,先生。它的工作非常感謝。實際上,較早的JSON.net是使用Nuget安裝的。然後我下載了這個DLL,現在它就像一個魅力一樣。非常感謝。 – user3811300 2014-09-30 04:00:20