I make a call to google's dictionary api like this:
var json = new WebClient().DownloadString(string.Format(@"http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q={0}&sl=en&tl=en", "bar"));
However I get a response that this code fails to parse correctly:
json = json.Replace("dict_api.callbacks.id100(", "").Replace(",200,null)", "");
JObject o = JObject.Parse(json);
The parse dies at encountering this:
"entries":[{"type":"example","terms":[{"type":"text","text":"\x3cem\x3ebars\x3c/em\x3e of sunlight shafting through the broken windows","language":"en"}]}]}
The
\x3cem\x3ebars\x
stuff kills the parse
Is there some way to handle this JSONP response with JSON.NET?
The answer by aquinas to another "Parse JSONP" question shows nice regex x = Regex.Replace(x, @"^.+?\(|\)$", "");
to handle with JSONP part (may need to tweak regex for this case), so main part here is how to deal with hex-encoded characters.
Reference: How to decode HTML encoded character embedded in a json string
So change your code to this will fix it:
The server is not returning valid JSON: JSON does not support
\xAB
character escape sequences, only\uABCD
escapes sequences.The "solutions" I have seen execute a text-replace on the string first. Here is one of my replies to a similar questions for Java. Note the regular expression
inputString.replaceAll("\\x(\d{2})", "\\u00$1")
at the bottom; adapt to language.