Проблема в преобразовании JSON в класс в Java (Google Custom Search)
-
22-10-2019 - |
Вопрос
Я очень новичок в JSON, Google API. Так что, пожалуйста, направляйте.
Я пытаюсь написать приложение в «Java», которое использовало бы Google Custom Serch API через RESTFUFL. Я начал изучать JSON и проходить через [ссылку http://code.google.com/apis/customsearch/v1/overview.html Я хотел написать код.
Это показывает JSON поиска Google:
http://code.google.com/apis/customsearch/v1/reference.html#method_search_cse_list
ссылка http://code.google.com/apis/customsearch/v1/reference.html
Из ссылки я обнаружил, какие поля этого таможни будут String или Int или любой другой тип данных. Они также определили структуру каждого объекта.
Но я сталкиваюсь с проблемами с некоторыми типами данных:
items.title array The title of the search result, in plain text.
items.snippet array The snippet of the search result, in plain text.
items.pagemap object Contains pagemap information for this search result.
items.pagemap.value array Pagemap information, keyed by the name of this pagemap.
items.pagemap.value.value object The actual pagemap information.
Как бы я определил их в своем классе. Какой массив является титульной строкой или символом, и эта пагмапа является какой -то соглашением, или любой сайт может дать свои собственные теги.
// класс CustomSearch
public class CustomSearch {
public URL getURL() throws MalformedURLException{
return url.getURL();
}
@Key ("items") ArrayList<SearchResult> results;
private @Key SearchURL url;
private @Key Query queries;
}
// учебный класс
class SearchResult {
public SearchResult(){
}
public String getTitle(){
return title;
}
public String getLink(){
return link;
}
public String getSnippet(){
return snippet;
}
private @Key String title; // is this right ?
private @Key String htmlTitle;
private @Key String link;
private @Key String snippet; // is this right ?
private @Key String htmlSnippet;
}
Решение
Я выпустил реальный поиск, используя мой ключ, как это было предложено в примере Google:
GET https://www.googleapis.com/customsearch/v1?key=INSERT-YOUR-KEY&cx=013036536707430787589:_pqjad5hr1a&q=flowers&alt=json
И вот что я получаю (показывая лишь немного данных)
items": [ { "kind": "customsearch#result", "title": "FTD.COM - Flowers Online | Roses, Fresh Flowers, Plants and Gift ...", "htmlTitle": "FTD.COM - \u003cb\u003eFlowers\u003c/b\u003e Online | Roses, Fresh \u003cb\u003eFlowers\u003c/b\u003e, Plants and Gift \u003cb\u003e...\u003c/b\u003e", "link": "http://www.ftd.com/", "displayLink": "www.ftd.com", "snippet": "Aug 2, 2011 ... Order flowers online for same day floral delivery. Shop for flowers, chocolates, roses, gifts and gift baskets by occasion, season or get beautiful ...", "htmlSnippet": "Aug 2, 2011 \u003cb\u003e...\u003c/b\u003e Order \u003cb\u003eflowers\u003c/b\u003e online for same day floral delivery. Shop for \u003cb\u003eflowers\u003c/b\u003e, chocolates, \u003cbr\u003e roses, gifts and gift baskets by occasion, season or get beautiful \u003cb\u003e...\u003c/b\u003e", "cacheId": "D_MQAIEeVpAJ", "pagemap": { "metatags": [ { "y_key": "e887dc108fef83f6", "msvalidate.01": "71957E1C9D33211154243270EB14C63C" } ] } ......
Это выглядит как:
items.title array The title of the search result, in plain text.
Это выглядит как строковый дат данных из кучи результатов, которые я получаю, поэтому я не уверен, почему ссылка классифицировала его как массив
items.snippet array The snippet of the search result, in plain text.
Это выглядит как строковый дат данных из результатов, которые я получил
items.pagemap object Contains pagemap information for this search result. items.pagemap.value array Pagemap information, keyed by the name of this pagemap. items.pagemap.value.value object The actual pagemap information.
На основе ПАГЕМАПАСНОСТЬ ОПИСАНИЕ Это выглядит как произвольные данные пары клавиш, которые веб-сайт мог предоставить.
Ниже приведены некоторые из PageMaps, которые я получаю от теста для вашей ссылки:
"pagemap": { "metatags": [ { "y_key": "e887dc108fef83f6", "msvalidate.01": "71957E1C9D33211154243270EB14C63C" } ] } "pagemap": { "website": [ { "type": "website", "title": "ProFlowers", "description": "The freshest flowers, guaranteed to last at least 7 days.", "image": "http://a1128.g.akamai.net/7/1128/497/0001/images.proflowers.com/pcsite/ProflowersLogo_nb.gif", "url": "http://www.proflowers.com/", "site_name": "ProFlowers", "app_id": "180475245301608" } ], "metatags": [ { "msnbot": "NOODP", "msvalidate.01": "77940E049C181974C3AA656C72688B4C" } ] } "pagemap": { "metatags": [ { "viewport": "width=device-width; initial-scale=1.0; maximum-scale=1.0;" } ]
Поскольку PageMap очень неструктурирован Map<String, JSONObject> pagemap
. Анкет Как вы можете видеть, я просто держу оригинальный jsonObject в PageMap, так что, если вам это нужно, вы всегда можете его извлечь. Если нет набора определений, какой тип мы могли бы поместить в PageMap вместе с его полями, представляя значение PageMap в качестве класса, может быть трудным.