2010-12-30 3 views
0

Я использую API геокодирования Google, чтобы получить строку JSON, содержащую информацию о местоположении геокода. Вот строка, которую я возвращаю из Google.Получение java.lang.ClassCastException при использовании net.sf.json.JSONObject с Googles Geocoding

{ 
    "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.

Спасибо,

Эндрю

+0

Выполняет 'query (json," Placemark [0] ")' return a 'String'? – Nishant

+0

Когда я помещаю «System.out.println (query (json,« Placemark [0] »). GetClass()); перед последней строкой он говорит, что возвращает java.lang.String. –

+0

), так что теперь вы знаете, что делать. Верните JSONObject из 'query()' или удалите литье и присвоение. – Nishant

ответ

1

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

System.out.println (query (json, "Placemark [0]"). Class);

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

+0

В нем говорится, что это java.lang.String. –

+0

Очевидно, что код, на который я смотрел, использовал более старую версию ответа от Google, и она получала неожиданные результаты. Я принял ответ от Google и смог выяснить, где происходили несоответствия типов. Спасибо, парни. –