2013-10-22 76 views
3

我有一個JSON編碼數組是這樣的:如何獲得json編碼數組在JavaScript中的長度?

{ 
    "ar0":"{\"start\":{\"lat\":22.9939202,\"lng\":72.50009499999999},\"end\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"waypoints\":[[23.0316834,72.4779436]]}", 

    "ar1":"{\"start\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"end\":{\"lat\":23.0420584,\"lng\":72.67145549999998},\"waypoints\":[[23.02237,72.6500747]]}", 

    "ar2":"{\"start\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"end\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"waypoints\":[[23.0016629,72.58898380000005]]}" 

} 

我quetion是:

(1)如何找到這個數組的長度是多少? //here it is 3

(2)如何使用它的值?
//for example:for as0 the value is {\"start\":{\"lat\":22.9939202,\"lng\":72.50009499999999},\"end\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"waypoints\":[[23.0316834,72.4779436]]}

javascript code where i use upper things :

function setroute(os) 
{ 
    var wp = []; 
    for(var i=0;i<os.waypoints.length;i++) 
     wp[i] = {'location': new google.maps.LatLng(os.waypoints[i][0], os.waypoints[i][1]),'stopover':false } 

    ser.route({'origin':new google.maps.LatLng(os.start.lat,os.start.lng), 
    'destination':new google.maps.LatLng(os.end.lat,os.end.lng), 
    'waypoints': wp, 
    'travelMode': google.maps.DirectionsTravelMode.DRIVING},function(res,sts) { 
     if(sts=='OK')ren.setDirections(res); 
    }) 
} 

function fetchdata() 
{ 
    var jax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
    jax.open('POST','process.php'); 
    jax.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 

    jax.send('command=fetch') 
    jax.onreadystatechange = function(){ if(jax.readyState==4) {     
    alert(JSON.parse(jax.responseText).ar0); 
     try { 
       console.log(jax.responseText); 

      //it is not work 

     for(var i=0;i<JSON.parse(jax.responseText).length;i++) 
       { 
        setroute(eval('(' + jax.responseText + ')')); 
       } 
      } 
     catch(e){ alert(e); } 
    }} 
} 

回答

8

你JSON不是一個數組,但是一個對象。如果你希望它是一個數組,它應該是這樣的:

[ 
    "{\"start\":{\"lat\":22.9939202,\"lng\":72.50009499999999},\"end\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"waypoints\":[[23.0316834,72.4779436]]}", 

    "{\"start\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"end\":{\"lat\":23.0420584,\"lng\":72.67145549999998},\"waypoints\":[[23.02237,72.6500747]]}", 

    "{\"start\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"end\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"waypoints\":[[23.0016629,72.58898380000005]]}" 

] 

然後,你可以得到一個JavaScript數組如下:

var array = JSON.parse(jax.responseText); 

,並獲得值如下:

array[0] 

array.length 

編輯:爲了有一個真正的JSON陣列與PHP json_encode方法,請參閱此相關的question

通過此修改,您將能夠在不使用解決方法的情況下使用JS陣列的所有可能性。

+1

這不是一個answer.i在php中創建json encode數組並在javascript中使用它。 – DS9

+0

我不知道你使用過PHP。我更新了我的答案,我希望這會幫助你更多;) – Pith

+0

謝謝..這是幫助我。 – DS9

3

JavaScript中的對象沒有像數組那樣的.length屬性。

在ES5你可以這樣做:Object.keys({}).length; // 0

其他的解決辦法是遍歷你的對象的所有屬性與for .. in循環和計數。

1

關於第一個問題,你應該使用Object.keys(item).length

爲了讓您的對象的值,你應該遍歷其與for循環:

for(var key in item) { var val = item[key]; }

2
var count = 0; 
Object.keys(json).forEach(function (key) { 
    count++; 
    alert(json[key].start.lat); 
}); 

alert(count); 

使用jQuery

$(json).each(function() { count++; alert(this.start.lat); }); 
alert(count); 
4

Y你可以使用下面的代碼。它會產生你想要的輸出3

var test = { 
    "ar0":"{\"start\":{\"lat\":22.9939202,\"lng\":72.50009499999999},\"end\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"waypoints\":[[23.0316834,72.4779436]]}", 

    "ar1":"{\"start\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"end\":{\"lat\":23.0420584,\"lng\":72.67145549999998},\"waypoints\":[[23.02237,72.6500747]]}", 

    "ar2":"{\"start\":{\"lat\":23.0394491,\"lng\":72.51248850000002},\"end\":{\"lat\":22.9999061,\"lng\":72.65318300000001},\"waypoints\":[[23.0016629,72.58898380000005]]}" 

} 
var getLength = function(obj) { 
    var i = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)){ 
      i++; 
     } 
    } 
    return i; 
}; 
console.log(getLength(test));