使用REST和C#实现Google音译API,面临unicode和解析问题

我一直在尝试使用RESTful方法使用Google Transliterate API,因为它很容易通过服务器端语言(C#here)来实现。

因此,我遇到了以下url格式: http : //www.google.com/transliterate/indic? telqt = 1&lapapair = en | hi&text = bharat %2Cindia&tl_app = 3 ,它以下列格式返回JSON:

[ { "ew" : "bharat", "hws" : [ "भारत","भरत","भरात","भारात","बहरत", ] }, { "ew" : "india", "hws" : [ "इंडिया","इन्डिया","इण्डिया","ईन्डिया","इनडिया", ] }, ] 

我尝试了HttpWebRequestHttpWebResponse来获取JSON,但它在Web浏览器上以Unicode的forms返回值,例如:

 [ { "ew" : "bharat", "hws" : [ "\u092D\u093E\u0930\u0924","\u092D\u0930\u0924","\u092D\u0930\u093E\u0924","\u092D\u093E\u0930\u093E\u0924","\u092C\u0939\u0930\u0924", ] }, { "ew" : "india", "hws" : [ "\u0907\u0902\u0921\u093F\u092F\u093E","\u0907\u0928\u094D\u0921\u093F\u092F\u093E","\u0907\u0923\u094D\u0921\u093F\u092F\u093E","\u0908\u0928\u094D\u0921\u093F\u092F\u093E","\u0907\u0928\u0921\u093F\u092F\u093E", ] }, ] 

所以,我应用了这篇文章并通过它传递了JSON 字符串 ,然后返回:

 [ { "ew" : "bharat", "hws" : [ "भारत","भरत","भरात","भारात","बहरत", ] }, { "ew" : "india", "hws" : [ "इंडिया","इन्डिया","इण्डिया","ईन्डिया","इनडिया", ] }, ] 

第一个问题 :到目前为止我做得对吗? 因为在浏览器中它不会显示最后的" ] " ,但HTML源中存在" ] " (不确定为什么会发生这种情况)。 此外,当我尝试解析它时,使用(我使用这种技术可能是错的):

 var jss = new JavaScriptSerializer(); var dict = jss.Deserialize<Dictionary>(the_JSON_string); 

它给我的错误说:

 Invalid array passed in, extra trailing ','. 

第二个问题 :如果我到目前为止做得正确,我可以帮助解析印地语单词吗? 我应该采用什么方法,最好使用System.Web.Script.Serialization; 。 最终我想抓住印地文文本进行进一步处理。

请帮忙,谢谢。

我建议Json.Net解析json字符串。 下面的代码(带有您的示例字符串)可以使用,您无需执行任何操作即可查看这些字符。 Json解析器将为您处理它。

 string json = @"[ { ""ew"" : ""bharat"", ""hws"" : [ ""\u092D\u093E\u0930\u0924"",""\u092D\u0930\u0924"",""\u092D\u0930\u093E\u0924"",""\u092D\u093E\u0930\u093E\u0924"",""\u092C\u0939\u0930\u0924"", ] }, { ""ew"" : ""india"", ""hws"" : [ ""\u0907\u0902\u0921\u093F\u092F\u093E"",""\u0907\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0923\u094D\u0921\u093F\u092F\u093E"",""\u0908\u0928\u094D\u0921\u093F\u092F\u093E"",""\u0907\u0928\u0921\u093F\u092F\u093E"", ] }, ]"; dynamic obj = JsonConvert.DeserializeObject(json); MessageBox.Show(obj[0].hws[0].ToString()); 

我想你可以像下面的方式删除最后一个逗号

  the_JSON_string = the_JSON_string.Remove(the_JSON_string.LastIndexOf(','));