0

Javascript を使用して GET 経由で JSON オブジェクトを取得しています。これは、Google Earth での逆ジオコーディングの結果です ( https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests )。

{
   "results" : [
  {
     "address_components" : [
        {
           "long_name" : "1",
           "short_name" : "1",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "Church Street",
           "short_name" : "Church St",
           "types" : [ "route" ]
        },
        {
           "long_name" : "Mid-Cambridge",
           "short_name" : "Mid-Cambridge",
           "types" : [ "neighborhood", "political" ]
        },
        {
           "long_name" : "Cambridge",
           "short_name" : "Cambridge",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Cambridge",
           "short_name" : "Cambridge",
           "types" : [ "administrative_area_level_3", "political" ]
        },
        {
           "long_name" : "Middlesex",
           "short_name" : "Middlesex",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "Massachusetts",
           "short_name" : "MA",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United States",
           "short_name" : "US",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "02138",
           "short_name" : "02138",
           "types" : [ "postal_code" ]
        }
     ],
     "formatted_address" : "1 Church Street, Cambridge, MA 02138, USA",
     "geometry" : {
        "location" : {
           "lat" : 42.37440120,
           "lng" : -71.11850609999999
        },
        "location_type" : "ROOFTOP",
        "viewport" : {
           "northeast" : {
              "lat" : 42.37575018029150,
              "lng" : -71.11715711970849
           },
           "southwest" : {
              "lat" : 42.37305221970851,
              "lng" : -71.11985508029150
           }
        }
     },
     "postcode_localities" : [],
     "types" : [ "street_address" ]
  }
   ],
   "status" : "OK"
}

指示では、JSON を (JS を使用して) 次のように解析するように指示されています。

for (i = 0; i < myJSONResult.results.length; i++) {
  myAddress[i] = myJSONResult.results[i].formatted_address;
}

しかし、それは機能していません。myAddress は、以前に定義済みで何も含まれていない配列であり、myJSONResult は、HTTP 要求からの応答を格納するために使用した変数であると想定しています。Formatted_address 文字列を取得するにはどうすればよいですか?

4

2 に答える 2

1

Googleで説明されているように、応答を解析する必要があります

結果から値を抽出する場合は、通常、これらの結果を解析する必要があることに注意してください。JSON の解析は比較的簡単です。

最新のブラウザーは、https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse を使用して文字列を json に変換できます。それ以外の場合は、 https ://github.com/douglascrockford/JSONなどのライブラリがあります。 -jsまたは jQuery とparseJSON

于 2013-05-12T11:43:23.430 に答える
0

jsfiddle.net

var resultsData = JSONOBJECT;

function ProcessResults(resultsData) {

            if (resultsData != null) {                               

                if (resultsData.status == "OK") {

                    var address = "", city = "", state = "", zip = "", country = "", formattedAddress = "";
                    var lat;
                    var lng;

                    for (var i = 0; i < resultsData.results[0].address_components.length; i++) {
                        var addr = resultsData.results[0].address_components[i];
                        // check if this entry in address_components has a type of country
                        if (addr.types[0] == 'country')
                            country = addr.long_name;
                        else if (addr.types[0] == 'street_address') // address 1
                            address = address + addr.long_name;
                        else if (addr.types[0] == 'establishment')
                            address = address + addr.long_name;
                        else if (addr.types[0] == 'route')  // address 2
                            address = address + addr.long_name;
                        else if (addr.types[0] == 'postal_code')       // Zip
                            zip = addr.short_name;
                        else if (addr.types[0] == ['administrative_area_level_1'])       // State
                            state = addr.long_name;
                        else if (addr.types[0] == ['locality'])       // City
                            city = addr.long_name;
                    }


                    if (resultsData.results[0].formatted_address != null) {
                        formattedAddress = resultsData.results[0].formatted_address;
                    }



                    var location = resultsData.results[0].geometry.location;



                    lat = location.lat;
                    lng = location.lng;

                    alert('City: '+ city + '\n' + 'State: '+ state + '\n' + 'Zip: '+ zip + '\n' + 'Formatted Address: '+ formattedAddress + '\n' + 'Lat: '+ lat + '\n' + 'Lng: '+ lng);

                }

            }

        }
于 2013-05-12T12:11:18.920 に答える