2012-04-19 15 views
0

JSONの出力形式はgiven by GoogleGoogle Maps Javascript API v3が別のJSONを返しますか?

ですが、時々slightly different formatが表示されます。彼らは、標準的なものだと異なっている - これは

"viewport": { 
      "aa": { 
      "b": 37.329901, 
      "f": 37.37543489999999 
      }, 
      "ba": { 
      "b": -122.06526500000001, 
      "f": -121.99577999999997 
      } 
     } 

お知らせ場所、境界とビューポートの下のキーは... gecoder.geocode({'address': address}, callback)

"location": { 
      "Za": 37.3492097, 
      "$a": -122.03260190000003 
     }, 

のコールバック関数にresults変数からです。このJSONをAJAX呼び出しの に送って をサーバーに送って解析する必要があり、パーサが「$ a」を有効なキー名として使用できないため、これは問題です。

これは正常なのでしょうか、何か不足していますか?

EDIT: 私はクラウドホストプラットフォーム(salesforce.com)を利用しています。私たちはJavascript API v3を使用しています。私はローカルのHTMLファイルからこの問題を再現することができました。 私は企業プロキシの背後にいると考えています。誰もこれに直面した?

+0

なぜパーサーはそれを取得できませんか?これは有効なjsonキー名です。おそらくあなたのパーサーを修正しますか? – tkone

+0

正しく書式化されたクエリの結果は、「わずかに異なる形式」のデータですか?そのクエリは何ですか?ドキュメントに従っている場合、結果は一貫しているはずです。 –

+0

私が使用しているパーサーは、私が使用しているプラ​​ットフォームに組み込まれており、キー値がクラス内で変数名になることが予想され、 "$"は受け入れられていない文字です –

答えて

0

バグレポートとAPIドキュメントのコメントで指摘されているように、コールバックのresponseオブジェクトは純粋なJSONではありません。 JSONオブジェクトを取得するには、以下のように自分自身を作成する必要がありました。

//assume status is ok 

var bestResult = getBestResultFromJSON(results); 

var bounds = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}}; 
var location = {'lat' : 0, 'lng' : 0}; 
var viewport = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}}; 
// bounds not always available (https://developers.google.com/maps/documentation/javascript/reference#GeocoderGeometry) 
if(bestResult.geometry.hasOwnProperty(bounds)) { 
    bounds.southwest.lat = bestResult.geometry.bounds.getSouthWest().lat(); 
    bounds.southwest.lng = bestResult.geometry.bounds.getSouthWest().lng(); 
    bounds.northeast.lat = bestResult.geometry.bounds.getNorthEast().lat(); 
    bounds.northeast.lng = bestResult.geometry.bounds.getNorthEast().lng(); 
} 
else { 
    bounds = null; 
}      

viewport.southwest.lat = bestResult.geometry.viewport.getSouthWest().lat(); 
viewport.southwest.lng = bestResult.geometry.viewport.getSouthWest().lng(); 
viewport.northeast.lat = bestResult.geometry.viewport.getNorthEast().lat(); 
viewport.northeast.lng = bestResult.geometry.viewport.getNorthEast().lng(); 

location.lat = bestResult.geometry.location.lng(); 
location.lng = bestResult.geometry.location.lng(); 

var jsonResults = {'results' : [{'address_components' : bestResult.address_components, 
       'formatted_address': bestResult.formatted_address, 
       'geometry' : {'bounds' : bounds, 'location' : location, 'location_type' : bestResult.location_type, 'viewport' : viewport}, 
       'types' : bestResult.types}], 'status' : status}; 
0

文書化されたメソッドのみを使用していて、文書化されていない応答を受け取っている場合は、バグです。 Issues Listに問題を提出してください。間違った応答を一貫して生成するものがある場合は、デモレーターアドレスを含める必要があります。一貫して間違ったアドレスがない場合は、できるだけ詳細を記入してください。リクエストがあまりにも近くに繰り返されると、それは起こりますか?

別のブラウザクライアントを使用してテストしたり、別のマシンを使用してテストしたりしてください。現在のブラウザやパソコンに奇妙なことがあり、APIが誤動作している可能性があります。

今後の参考のため、この回答を問題番号でコメントすることをおすすめします。

+0

私は[bug 4089](http://code.google.com/p/gmaps-api-issues/issues/detail?id=4089)を提出しました Googleのジオコーディングの例のページでも、応答は正しくありません。 https://google-developers.appspot.com/maps/documentation/javascript/examples/geocoding-simple –

+0

このレポートには、質問に比べて*多くの*があります。 Salesforce.comを使用すると、httpsと認証がすべて関連している可能性があります(Googleから直接サポートを受けるMaps for Businessライセンスを取得する必要があることも意味します)。これらの3つを順番に、あるいは組み合わせて削除し、違いがあるかどうかを確認してください。たとえば、httpsやsalesforce.comを使用していないため、このような問題は一度もありませんでした。 –

+0

Googleではビジネス向けのマップを使用していません_yet_。 私は単純なHTMLファイルを作成し、同じものを得ました。プロキシの背後にいると思っていますか?私は別のネットワークからそれを試してみると戻ってくるだろう –

関連する問題