Получение java.lang.ClassCastException при использовании net.sf.json.JSONObject с геокодированием Googles - PullRequest
0 голосов
/ 30 декабря 2010

Я использую API геокодирования Google, чтобы получить строку JSON, содержащую информацию о местоположении геокода. Вот строка, которую я получаю от Google.

{
  "status": "OK",
  "results": [ {
"types": [ "street_address" ],
"formatted_address": "550 Susong Dr, Morristown, TN 37814, USA",
"address_components": [ {
  "long_name": "550",
  "short_name": "550",
  "types": [ "street_number" ]
}, {
  "long_name": "Susong Dr",
  "short_name": "Susong Dr",
  "types": [ "route" ]
}, {
  "long_name": "Morristown",
  "short_name": "Morristown",
  "types": [ "locality", "political" ]
}, {
  "long_name": "Morristown",
  "short_name": "Morristown",
  "types": [ "administrative_area_level_3", "political" ]
}, {
  "long_name": "Hamblen",
  "short_name": "Hamblen",
  "types": [ "administrative_area_level_2", "political" ]
}, {
  "long_name": "Tennessee",
  "short_name": "TN",
  "types": [ "administrative_area_level_1", "political" ]
}, {
  "long_name": "United States",
  "short_name": "US",
  "types": [ "country", "political" ]
}, {
  "long_name": "37814",
  "short_name": "37814",
  "types": [ "postal_code" ]
} ],
"geometry": {
  "location": {
    "lat": 36.2422740,
    "lng": -83.3219410
  },
  "location_type": "ROOFTOP",
  "viewport": {
    "southwest": {
      "lat": 36.2391264,
      "lng": -83.3250886
    },
    "northeast": {
      "lat": 36.2454216,
      "lng": -83.3187934
    }
  }
}

}] }

Однако, когда я запускаю следующий код в Java, я получаю ошибку «java.lang.ClassCastException: java.lang.String, несовместимая с net.sf.json.JSONObject».

  URL url = new URL(URL + "&address=" + URLEncoder.encode(address, "UTF-8") + "&signature=" + key);
  URLConnection conn = url.openConnection();
  ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
  IOUtils.copy(conn.getInputStream(), output);
  output.close();

  GAddress gaddr = new GAddress();
  JSONObject json = JSONObject.fromObject(output.toString());
  JSONObject placemark = (JSONObject) query(json, "Placemark[0]");

Я не уверен, почему я получаю ошибку. Ответ Google выглядит для меня как правильная строка JSON. У кого-нибудь еще были проблемы с этим? Я открыт для использования чего-то, кроме net.sf.json, если по какой-то причине это плохо работает с Google.

Спасибо

Andrew

1 Ответ

1 голос
/ 30 декабря 2010

Похоже, вы получаете строку назад от вашего первоначального вызова функции. Чтобы быть уверенным, вы можете добавить

System.out.println (запрос (json, "Метка [0]"). Класс);

прямо перед последней строкой. Это даст вам тип объекта, с которым вы имеете дело.

...