GoogleのジオコーディングAPIを使用して、ジオコード位置情報を含むJSON文字列を取得しています。ここで私はGoogleから戻ってくる文字列です。googleジオコーディングでnet.sf.json.JSONObjectを使用する場合のjava.lang.ClassCastExceptionの取得
{
"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を:net.sf.json.JSONObjectと互換性がないjava.lang.Stringで" 取得エラー。
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文字列のように見えます。他に誰もこれに問題があった?なんらかの理由でGoogleとうまくやらないと、net.sf.jsonのほかに何かを使うことに私は気をつけています。
おかげで、
アンドリュー
'query(json、Placemark [0] ')'は 'String'を返しますか? – Nishant
"System.out.println(query(json、Placemark [0]")。getClass()); "最後の行の前に、java.lang.Stringを返すと言います。 –
)今、あなたは何をすべきかを知っています。 'query()'からJSONObjectを返すか、キャストと代入を削除してください。 – Nishant