Проблема преобразования JSON в класс в Java (пользовательский поиск Google) - PullRequest
1 голос
/ 04 сентября 2011

Я новичок в json, Google apis.Так что, пожалуйста, руководство.
Я пытаюсь написать приложение в 'JAVA', которое будет использовать Google Serch API через Restful.Я начал изучать json и, пройдя через [link] 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;    

}

1 Ответ

1 голос
/ 07 сентября 2011

Я выполнил реальный поиск, используя мой ключ, как предложено в примере 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.

Это похоже на тип данных String из множества результатов, которые я получаю, поэтому я не уверен, почему ссылка классифицировала его как массив

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.

На основе описания PageMap это выглядит как произвольная пара данных ключ-значение, которые может предоставить веб-сайт.

Ниже приведены некоторые карты страниц, которые я получил из своего теста для справки:

 "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;"
     }
    ]

Поскольку страница страниц очень неструктурирована, я бы сохранил их как Map<String, JSONObject> pagemap.Как вы можете видеть, я просто сохраняю исходный JSONObject в pagemap, поэтому, если вам это нужно, вы всегда можете извлечь его.Если нет набора определений, какой тип мы могли бы поместить в карту страницы вместе с ее полями, представление значения карты страницы как класса может быть затруднено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...