Проблема в преобразовании JSON в класс в Java (Google Custom Search)

StackOverflow https://stackoverflow.com/questions/7301468

  •  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 в качестве класса, может быть трудным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top