Преобразование ответа API википедии с использованием Json.net - PullRequest
0 голосов
/ 13 ноября 2011

Я запрашиваю данные с помощью API Википедии и хотел бы преобразовать результат в строку [].

Запрос "test"

en.wikipedia.org/w/api.php?action=opensearch&search=test&format=json&callback=spellcheck

возвращает этот результат здесь:

spellcheck(["test",["Test cricket","Test","Testicle","Testudines","Testosterone","Test pilot","Test (assessment)","Testimonial match","Testimony","Testament (band)"]])

Могу ли я использовать Json.net для удаления или игнорирования тега "проверка орфографии"?Если я преобразовываю ответ, используя этот код, приложение вылетает:

Dictionary<string, string[]> dict = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(response); 

1 Ответ

4 голосов
/ 13 ноября 2011

API Wikipedia (с использованием JSON) предполагает, что вы используете JSONP.Вы можете просто полностью удалить параметр обратного вызова из строки запроса:

en.wikipedia.org / w / api.php? Action = opensearch & search = test & format = json

Кроме того, полученный результат, вероятно, не может быть преобразован в Dictionary<string, string[]>.Если вы посмотрите внимательно, это на самом деле массив, в котором первый объект - это строка (поисковый термин), а второй - список строк (результатов).

Для меня сработало следующее:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(
    @"http://en.wikipedia.org/w/api.php?action=opensearch&search=test&format=json");

string[] searchResults = null;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        JArray objects = JsonConvert.DeserializeObject<JArray>(reader.ReadToEnd());
        searchResults = objects[1].Select(j => j.Value<string>()).ToArray();
    }
}
...