Вопрос по c#, google-api, jsonp, json.net – Как проанализировать искаженный JSONP с помощью шестнадцатеричных символов с помощью JSON.NET?

3

Я звоню в словарь API Google, как это:

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"));

Однако я получаю ответ, что этот код не может правильно проанализировать:

json = json.Replace("dict_api.callbacks.id100(", "").Replace(",200,null)", "");
JObject o = JObject.Parse(json);

Разбор умирает при встрече с этим:

"entries":[{"type":"example","terms":[{"type":"text","text":"\x3cem\x3ebars\x3c/em\x3e of sunlight shafting through the broken windows","language":"en"}]}]}

\x3cem\x3ebars\x

материал убивает разбор

Есть ли способ обработать этот ответ JSONP с помощью JSON.NET?

ответ отАквинский другому "Parse JSONP" вопрос показывает хорошее регулярное выражениеx = Regex.Replace(x, @"^.+?\(|\)$", ""); для обработки с частью JSONP (может потребоваться настроить регулярное выражение для этого случая), поэтому основная часть здесь - как работать с шестнадцатеричными символами.

Ваш Ответ

2   ответа
1

does not служба поддержки\xAB только escape-последовательности символов\uABCD избегает последовательностей.

«Решения» Я видел, как выполнить текст-заменить на строку в первую очередь. Вот один из моихотвечает на похожие вопросы по Java, Обратите внимание на регулярное выражениеinputString.replaceAll("\\x(\d{2})", "\\u00$1") внизу; адаптироваться к языку.

9

Как декодировать кодированный HTML-код, встроенный в строку json

JSON specs for strings do not allow hexadecimal ASCII escape-sequences, but only Unicode escape-sequences, which is why the escape sequence is unrecognized and which is why using \u0027 instead should work ... now you could blindly replace \x with \u00 (this should perfectly work on valid JSON, although some comments may get damaged in theory, but who cares ... :D)

Так что измените код, чтобы исправить это:

        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"));

        json = json
                .Replace("dict_api.callbacks.id100(", "")
                .Replace(",200,null)", "")
                .Replace("\\x","\\u00");

        JObject o = JObject.Parse(json);

Похожие вопросы