Reputation: 911
I have PHP outputting a JSON multidimensional array as follows:
{"rates":[{"meter":"30","rate":"0.15060","ppd":"10.000"}]}
However, I keep getting an error when trying to decode it on the JavaSCript side of things.
Uncaught TypeError: Cannot read property 'length' of null
Here is the code below for the jQuery side of things:
success: function (result) {
console.log(result);
$.each($.parseJSON(result), function (item, value) {
if (item == "rates") {
$.each($.parseJSON(value), function (i, object) {
console.log(i + "=" + object);
});
}
The 1st console log gives me the output I mentioned at the top, but for some reason i am not able to access the array as I thought I would.
Any help is greatly appreciated :)
Upvotes: 3
Views: 34752
Reputation: 3662
The program shows how to read json and store data into textbox
$(document).ready(function(){
$.getJSON("Test.json",function(data){
$.each(data,function(key,value){
alert(data[key].attrib1name);
alert(data[key].attrib2name);
$('input').val(data[key].enterpriseName);
activities=data[key].activities;
console.log(value);
});
});
});
Upvotes: 1
Reputation: 5939
You don't need to call parseJSON again on value. It's already an object
var result='{"rates":[{"meter":"30","rate":"0.15060","ppd":"10.000"}]}';
console.log(result);
$.each($.parseJSON(result), function (item, value) {
if (item == "rates") {
$.each(value, function (i, object) {
$.each(object, function (subI, subObject) {
console.log(subI + "=" + subObject);
});
});
}
});
Also, incase you were wondering the error was happening because you were trying to call parseJSON on an object and parseJSON expects a string so it was returning null to the each function which was then trying to do a for loop based on null.length
Upvotes: 12
Reputation: 700182
As you only want the content of one property, you don't need to loop through all the properties, so you don't need the nested loops. Just get the array and loop through it:
$.each($.parseJSON(result).rates, function (i, object) {
console.log(i + "=" + object);
});
If you are using a method specifically for getting JSON, or if the content type is correctly set on the response, you shouldn't even parse the result, It's already parsed before the callback method is called:
$.each(result.rates, function (i, object) {
console.log(i + "=" + object);
});
Upvotes: 5