I am new to JSON and I used json_encode to create a JSON object that looks like this
[{
"timestamp": "12\/16\/2013 0:00",
"curr_property": "7211",
"curr_property_cost": "123",
"day_property": "48",
"day_property_cost": "281",
"curr_solar_generating": "4958",
"curr_solar_export": "0",
"day_solar_generated": "33",
"day_solar_export": "0",
"curr_chan1": "1964",
"curr_chan2": "4958",
"curr_chan3": "289",
"day_chan1": "13",
"day_chan2": "33",
"day_chan3": "1"
}, {
"timestamp": "12\/16\/2013 0:00",
"curr_property": "7179",
"curr_property_cost": "123",
"day_property": "72",
"day_property_cost": "281",
"curr_solar_generating": "4926",
"curr_solar_export": "0",
"day_solar_generated": "49",
"day_solar_export": "0",
"curr_chan1": "1980",
"curr_chan2": "4926",
"curr_chan3": "273",
"day_chan1": "19",
"day_chan2": "49",
"day_chan3": "2"
}, {
"timestamp": "12\/16\/2013 0:00",
"curr_property": "9627",
"curr_property_cost": "165",
"day_property": "104",
"day_property_cost": "282",
"curr_solar_generating": "4749",
"curr_solar_export": "0",
"day_solar_generated": "65",
"day_solar_export": "0",
"curr_chan1": "1980",
"curr_chan2": "4749",
"curr_chan3": "2898",
"day_chan1": "26",
"day_chan2": "65",
"day_chan3": "12"
}, {
"timestamp": "12\/16\/2013 0:00",
"curr_property": "9610",
"curr_property_cost": "165",
"day_property": "136",
"day_property_cost": "282",
"curr_solar_generating": "4781",
"curr_solar_export": "0",
"day_solar_generated": "81",
"day_solar_export": "0",
"curr_chan1": "1980",
"curr_chan2": "4781",
"curr_chan3": "2849",
"day_chan1": "32",
"day_chan2": "81",
"day_chan3": "21"
}, {
"timestamp": "12\/16\/2013 0:01",
"curr_property": "9691",
"curr_property_cost": "166",
"day_property": "168",
"day_property_cost": "283",
"curr_solar_generating": "4797",
"curr_solar_export": "0",
"day_solar_generated": "97",
"day_solar_export": "0",
"curr_chan1": "1996",
"curr_chan2": "4797",
"curr_chan3": "2898",
"day_chan1": "39",
"day_chan2": "97",
"day_chan3": "31"
}, {
"timestamp": "12\/16\/2013 0:01",
"curr_property": "7034",
"curr_property_cost": "120",
"day_property": "191",
"day_property_cost": "283",
"curr_solar_generating": "4781",
"curr_solar_export": "0",
"day_solar_generated": "113",
"day_solar_export": "0",
"curr_chan1": "1980",
"curr_chan2": "4781",
"curr_chan3": "273",
"day_chan1": "46",
"day_chan2": "113",
"day_chan3": "32"
}]
I have tried to parse the data using the script below
$(document).ready(
function() {
var jsonData = JSON.parse("<?php echo $jsondata; ?>");
console.log(jsonData.timestamp[0]);
});
I don't know what I am doing wrong here. I do know that an has a length of 0 by default in javascript, so how do I get the value? BTW var_dump on the $jsondata gives out the data
3 Answers 3
Your JSON data includes " characters. You are trying to inject it into a JavaScript string literal that is delimited with " but you aren't escaping the " characters in the data.
Your JSON also includes new lines, literal new lines are not allowed in JavaScript strings, so you need to replace them with escape sequences (\n) too.
That said, JSON is a subset of JavaScript literal syntax, so you don't need to go to the effort of converting a JSON text into a JavaScript string literal and then parsing it, you can simply use the JSON as JavaScript:
var data = <?php echo $jsondata; ?>;
You have another problem. Your JSON data represents an array of objects, not an object that has arrays as property values. You need to access the array before the property name: data[0].timestamp.
11 Comments
JSON.parse if you don't have to? Your solutions isn't even reliable: what happens if the JSON data contains a '?document.ready either.Try using single quotes here:
var jsonData = JSON.parse("<?php echo $jsondata; ?>");
Replace that with:
var jsonData = JSON.parse('<?php echo $jsondata; ?>');
Because the $jsondata contains double quotes ("), the string passed to JSON.parse() will be broken, resulting in invalid JavaScript.
However, as Quentin answered, the whole JSON.parse is unnecessary.
Like he answered, use: var data = <?php echo $jsondata; ?>;
Also, you're accessing the object incorrectly:
jsonData.timestamp[0];
Should be:
jsonData[0].timestamp;
your JSON is a array of timestamp objects, so use the array index [0], first.
6 Comments
json_encode, that should return a valid JSON string without the newlines. I believe that's just a formatting mistake from asking the question.You are calling console.log(jsonData.timestamp[0]); which basically means, inside jsonData find property timestamp which is an array and get the first index.
But jsonData is the array, not timestamp. You should probably go with something like console.log(jsonData[0].timestamp);
5 Comments
var jsonData = JSON.parse("<?php echo $jsondata; ?>"); should produce invalid JavaScript.' instead of " will work as long as your data won't contain any '. It looks like your data is mostly numerical, so you will be fine for now. Note though that var jsonData = <?php echo $jsondata; ?>; is still the superior solution.
var jsonData = JSON.parse('<?php echo $jsondata; ?>');as the JSON string contains double quotes within.