使用REST和C#实现谷歌音译API,面向Unicode和分析问题(Implementing Goo

2019-06-26 21:16发布

我一直在尝试使用REST方法,因为它很容易通过服务器端语言(这里是C#)这样做使用谷歌音译API。

所以,我碰到这个URL格式: http://www.google.com/transliterate/indic?tlqt=1&langpair=en|hi&text=bharat%2Cindia&tl_app=3返回的JSON格式:

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

我试过HttpWebRequestHttpWebResponse得到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", ] }, ]

所以,我申请这个文章 ,并通过它传递的JSON 字符串 ,它返回:

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

第一个问题 :我这样做是正确的那么远? 因为在浏览器中不显示最后一个" ] " ,但" ] "存在于HTML源(不知道为什么会发生)。 此外,当我尝试分析它,使用(我可能会使用这种技术是错误的):

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

它给我的错误说:

Invalid array passed in, extra trailing ','.

第二个问题 :如果我做对为止,我能得到一些帮助解析印地文词 ? 什么方法我应该使用最好System.Web.Script.Serialization; 。 最后,我要抢做进一步处理印地文文本。

请帮忙,谢谢。

Answer 1:

我会建议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());


Answer 2:

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

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


文章来源: Implementing Google transliterate API using REST and C#, facing unicode and parsing issues