C# Работа с JSON
Здравствуйте уважаемые программисты! Сегодня я объясню кратко как работать с JSON.
Для начала процитирую из Википедии что это такое:
А вот и ответ от Google:
Для парсинга JSON ответа существует библиотека JSON.NET. Скачать вы ее можете здесь. Итак, давайте рассмотрим пример как получить результаты поиска:
Для начала процитирую из Википедии что это такое:
Этот формат оказался очень удобным так как он легко читается человеком и спарсить результаты не составит труда. Давайте рассмотрим пример. Я написав код для программы PowerCodX Seo Pack получал результаты в формате JSON с Google при помощью этой ссылки:JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&safe=active&gl=ru&hl=ru&q=Test
А вот и ответ от Google:
{"responseData": {"results":[{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://www.speedtest.net/","url":"http://www.speedtest.net/","visibleUrl":"www.speedtest.net","cacheUrl":"http://www.google.com/search?q\u003dcache:M47_v0xF3m8J:www.speedtest.net","title":"Speedtest.net - The Global Broadband Speed \u003cb\u003eTest\u003c/b\u003e","titleNoFormatting":"Speedtest.net - The Global Broadband Speed Test","content":"\u003cb\u003eTest\u003c/b\u003e your Internet connection bandwidth to locations around the world with this interactive broadband speed \u003cb\u003etest\u003c/b\u003e."},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://www.xrite.com/online-color-test-challenge","url":"http://www.xrite.com/online-color-test-challenge","visibleUrl":"www.xrite.com","cacheUrl":"http://www.google.com/search?q\u003dcache:nceqIKISBgcJ:www.xrite.com","title":"Color \u003cb\u003eTest\u003c/b\u003e - Online Color Challenge | X-Rite","titleNoFormatting":"Color Test - Online Color Challenge | X-Rite","content":"Try out X-Rite\u0026#39;s free online color \u003cb\u003etest\u003c/b\u003e challenge to see how well you can differentiate hues. Find out how well you see color and compare your results today!"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://test.tankionline.com/","url":"http://test.tankionline.com/","visibleUrl":"test.tankionline.com","cacheUrl":"http://www.google.com/search?q\u003dcache:FnYEdF0lpH0J:test.tankionline.com","title":"\u003cb\u003eTest\u003c/b\u003e Server: Tanki Online","titleNoFormatting":"Test Server: Tanki Online","content":"Ты оказался на тестовом сервере игры «Танки Онлайн». На тестовый сервер имеют доступ члены тестовой группы и приглашенные ими игроки для \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://tests.kulichki.com/","url":"http://tests.kulichki.com/","visibleUrl":"tests.kulichki.com","cacheUrl":"http://www.google.com/search?q\u003dcache:gLG45GK0SWQJ:tests.kulichki.com","title":"Тесты. Психологические тесты онлайн. Пройдите тесты \u003cb\u003e...\u003c/b\u003e","titleNoFormatting":"Тесты. Психологические тесты онлайн. Пройдите тесты ...","content":"Среди множества психологических тестов есть серьезные, вопросов на 300, которые выявляют о человеке такое, что ему не могло присниться в самом \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://test-ipv6.com/","url":"http://test-ipv6.com/","visibleUrl":"test-ipv6.com","cacheUrl":"http://www.google.com/search?q\u003dcache:TYJZjqJSse8J:test-ipv6.com","title":"\u003cb\u003eTest\u003c/b\u003e your IPv6.","titleNoFormatting":"Test your IPv6.","content":"This will \u003cb\u003etest\u003c/b\u003e your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address."},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://aeterna.qip.ru/","url":"http://aeterna.qip.ru/","visibleUrl":"aeterna.qip.ru","cacheUrl":"http://www.google.com/search?q\u003dcache:qwu28CHYFmgJ:aeterna.qip.ru","title":"Бесплатные онлайн тесты, опросы и гадания на Аетерна","titleNoFormatting":"Бесплатные онлайн тесты, опросы и гадания на Аетерна","content":"Влияние массовой культуры США на другие страны огромно, а вот чтобы кто -то забабахал об этом \u003cb\u003eтест\u003c/b\u003e – такого я не видывал. \u003cb\u003eТест\u003c/b\u003e позволяет узнать \u003cb\u003e...\u003c/b\u003e"},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://www.test.com/","url":"http://www.test.com/","visibleUrl":"www.test.com","cacheUrl":"http://www.google.com/search?q\u003dcache:S9XHtkEncW8J:www.test.com","title":"Create \u003cb\u003eTests\u003c/b\u003e for Organizational Training and Certification Programs \u003cb\u003e...\u003c/b\u003e","titleNoFormatting":"Create Tests for Organizational Training and Certification Programs ...","content":"\u003cb\u003eTest\u003c/b\u003e.com provides a complete software solution for creating online \u003cb\u003etests\u003c/b\u003e and managing enterprise and specialist certification programs, in up to 22 languages."},{"GsearchResultClass":"GwebSearch","unescapedUrl":"http://www.humanmetrics.com/cgi-win/jtypes2.asp","url":"http://www.humanmetrics.com/cgi-win/jtypes2.asp","visibleUrl":"www.humanmetrics.com","cacheUrl":"http://www.google.com/search?q\u003dcache:w_lAt3mgXcoJ:www.humanmetrics.com","title":"Personality \u003cb\u003etest\u003c/b\u003e based on C. Jung and I. Briggs Myers type theory","titleNoFormatting":"Personality test based on C. Jung and I. Briggs Myers type theory","content":"Personality \u003cb\u003etest\u003c/b\u003e based on C. Jung and I. Briggs Myers type theory provides your type formula, type description, career choices."}],"cursor":{"resultCount":"246 000 000","pages":[{"start":"0","label":1},{"start":"8","label":2},{"start":"16","label":3},{"start":"24","label":4},{"start":"32","label":5},{"start":"40","label":6},{"start":"48","label":7},{"start":"56","label":8}],"estimatedResultCount":"246000000","currentPageIndex":0,"moreResultsUrl":"http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026safe\u003dactive\u0026hl\u003dru\u0026q\u003dTest","searchResultTime":"0,13"}}, "responseDetails": null, "responseStatus": 200}
Посмотрев на ответ вы подумайте что здесь сложнее чем XML-код но JSON просто не отформатирован. Для решения этой задачи я использовал замечательный сайт jsonformatter.curiousconcept.com. После форматирования ответ выглядит так:{ "responseData":{ "results":[ { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://www.speedtest.net/", "url":"http://www.speedtest.net/", "visibleUrl":"www.speedtest.net", "cacheUrl":"http://www.google.com/search?q\u003dcache:M47_v0xF3m8J:www.speedtest.net", "title":"Speedtest.net - The Global Broadband Speed \u003cb\u003eTest\u003c/b\u003e", "titleNoFormatting":"Speedtest.net - The Global Broadband Speed Test", "content":"\u003cb\u003eTest\u003c/b\u003e your Internet connection bandwidth to locations around the world with this interactive broadband speed \u003cb\u003etest\u003c/b\u003e." }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://www.xrite.com/online-color-test-challenge", "url":"http://www.xrite.com/online-color-test-challenge", "visibleUrl":"www.xrite.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:nceqIKISBgcJ:www.xrite.com", "title":"Color \u003cb\u003eTest\u003c/b\u003e - Online Color Challenge | X-Rite", "titleNoFormatting":"Color Test - Online Color Challenge | X-Rite", "content":"Try out X-Rite\u0026#39;s free online color \u003cb\u003etest\u003c/b\u003e challenge to see how well you can differentiate hues. Find out how well you see color and compare your results today!" }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://test.tankionline.com/", "url":"http://test.tankionline.com/", "visibleUrl":"test.tankionline.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:FnYEdF0lpH0J:test.tankionline.com", "title":"\u003cb\u003eTest\u003c/b\u003e Server: Tanki Online", "titleNoFormatting":"Test Server: Tanki Online", "content":"Ты оказался на тестовом сервере игры «Танки Онлайн». На тестовый сервер имеют доступ члены тестовой группы и приглашенные ими игроки для \u003cb\u003e...\u003c/b\u003e" }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://tests.kulichki.com/", "url":"http://tests.kulichki.com/", "visibleUrl":"tests.kulichki.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:gLG45GK0SWQJ:tests.kulichki.com", "title":"Тесты. Психологические тесты онлайн. Пройдите тесты \u003cb\u003e...\u003c/b\u003e", "titleNoFormatting":"Тесты. Психологические тесты онлайн. Пройдите тесты ...", "content":"Среди множества психологических тестов есть серьезные, вопросов на 300, которые выявляют о человеке такое, что ему не могло присниться в самом \u003cb\u003e...\u003c/b\u003e" }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://test-ipv6.com/", "url":"http://test-ipv6.com/", "visibleUrl":"test-ipv6.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:TYJZjqJSse8J:test-ipv6.com", "title":"\u003cb\u003eTest\u003c/b\u003e your IPv6.", "titleNoFormatting":"Test your IPv6.", "content":"This will \u003cb\u003etest\u003c/b\u003e your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address." }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://aeterna.qip.ru/", "url":"http://aeterna.qip.ru/", "visibleUrl":"aeterna.qip.ru", "cacheUrl":"http://www.google.com/search?q\u003dcache:qwu28CHYFmgJ:aeterna.qip.ru", "title":"Бесплатные онлайн тесты, опросы и гадания на Аетерна", "titleNoFormatting":"Бесплатные онлайн тесты, опросы и гадания на Аетерна", "content":"Влияние массовой культуры США на другие страны огромно, а вот чтобы кто -то забабахал об этом \u003cb\u003eтест\u003c/b\u003e – такого я не видывал. \u003cb\u003eТест\u003c/b\u003e позволяет узнать \u003cb\u003e...\u003c/b\u003e" }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://www.test.com/", "url":"http://www.test.com/", "visibleUrl":"www.test.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:S9XHtkEncW8J:www.test.com", "title":"Create \u003cb\u003eTests\u003c/b\u003e for Organizational Training and Certification Programs \u003cb\u003e...\u003c/b\u003e", "titleNoFormatting":"Create Tests for Organizational Training and Certification Programs ...", "content":"\u003cb\u003eTest\u003c/b\u003e.com provides a complete software solution for creating online \u003cb\u003etests\u003c/b\u003e and managing enterprise and specialist certification programs, in up to 22 languages." }, { "GsearchResultClass":"GwebSearch", "unescapedUrl":"http://www.humanmetrics.com/cgi-win/jtypes2.asp", "url":"http://www.humanmetrics.com/cgi-win/jtypes2.asp", "visibleUrl":"www.humanmetrics.com", "cacheUrl":"http://www.google.com/search?q\u003dcache:w_lAt3mgXcoJ:www.humanmetrics.com", "title":"Personality \u003cb\u003etest\u003c/b\u003e based on C. Jung and I. Briggs Myers type theory", "titleNoFormatting":"Personality test based on C. Jung and I. Briggs Myers type theory", "content":"Personality \u003cb\u003etest\u003c/b\u003e based on C. Jung and I. Briggs Myers type theory provides your type formula, type description, career choices." } ], "cursor":{ "resultCount":"246 000 000", "pages":[ { "start":"0", "label":1 }, { "start":"8", "label":2 }, { "start":"16", "label":3 }, { "start":"24", "label":4 }, { "start":"32", "label":5 }, { "start":"40", "label":6 }, { "start":"48", "label":7 }, { "start":"56", "label":8 } ], "estimatedResultCount":"246000000", "currentPageIndex":0, "moreResultsUrl":"http://www.google.com/search?oe\u003dutf8\u0026ie\u003dutf8\u0026source\u003duds\u0026start\u003d0\u0026safe\u003dactive\u0026hl\u003dru\u0026q\u003dTest", "searchResultTime":"0,13" } }, "responseDetails":null, "responseStatus":200 }Думаю теперь все будет понятно. Но сразу возникает вопрос: А как все-таки спарсить этот ответ? Какие методы использовать?
Для парсинга JSON ответа существует библиотека JSON.NET. Скачать вы ее можете здесь. Итак, давайте рассмотрим пример как получить результаты поиска:
const string GoogleUrl = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&safe=active&gl=ru&hl=ru&q={0}";
string searchString = searchText;
string parsedUrl = TextParser.UrlParse(url);
var webRequest = new WebClient().DownloadString(string.Format(GoogleUrl, searchString));
var jsonObject = (JObject)JsonConvert.DeserializeObject(webRequest);
var requestQuery = from result in jsonObject["responseData"]["results"].Children()
select
new ResultModel(
result.Value<string>("url"),
result.Value<string>("title"),
result.Value<string>("content"));
int i = 1;
var resultList = new List<ResultModel>();
foreach (var resultModel in requestQuery)
{
string parsedUrlFromRequest = TextParser.UrlParse(resultModel.Url);
if (parsedUrlFromRequest.IndexOf(parsedUrl, System.StringComparison.Ordinal) > -1)
{
resultList.Add(resultModel);
MessageBox.Show(string.Format("Сайт: {0}, Поисковой запрос: {1}, Позиция: {2}", parsedUrl, searchText, i));
}
i++;
}
Объяснять подробно я не буду как работает эта библиотека но вы можете посмотреть на официальным сайте примеры.
Ну вот и все. Если заметили грамматические ошибки или работоспособность кода нарушена пишите в комментариях или на почту: powercodx@mail.ru
Автор: PowerCodX, 2013
Comentarii
Trimiteți un comentariu