I have a set of data that is being passed on by the PHP's json_encode
function. I'm using the jQuery getJSON
function to decode it:
$.getJSON("url", function (data) {
console.log(data);
});
The output looks like this in the console:
Object {1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object, 8: Object, 9: Object, 10: Object}
I can access each array by using data[1]
, data[2]
etc, but to make it easier I thought of looping thought it so I can access all at once:
$.getJSON("url", function (data) {
for (var i = 0, len = data.length; i < len; i++) {
//do something
}
});
However I can't get this to work because the data.length
returns the value undefined
. What is wrong and how can I fix it?
Objects don't have a .length
property.
A simple solution if you know you don't have to worry about hasOwnProperty
checks, would be to do this:
Object.keys(data).length;
If you have to support IE 8 or lower, you'll have to use a loop, instead:
var length= 0;
for(var key in data) {
if(data.hasOwnProperty(key)){
length++;
}
}
One option is:
Object.keys(myObject).length
Sadly it not works under older IE versions (under 9).
If you need that compatibility, use the painful version:
var key, count = 0;
for(key in myObject) {
if(myObject.hasOwnProperty(key)) {
count++;
}
}
It looks as though it's not an array but an arbitrary object. If you have control over the PHP serialization, you might be able to change that.
As raina77ow pointed out, one way to do this in PHP would be by replacing something like this:
json_encode($something)
with something like:
json_encode(array_values($something))
But don't ignore the other answers here about Object.keys
. They should also accomplish what you want if you don't have the ability or the desire to change the serialization of your object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With