2014-02-18 76 views
0

我是新来的JSON和我使用json_encode创建一个JSON对象,看起来像这样解析JSON不工作

[{ 
     "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" 
}] 

我试图解析以下使用脚本数据

$(document).ready(
     function() { 
      var jsonData = JSON.parse("<?php echo $jsondata; ?>"); 
      console.log(jsonData.timestamp[0]);    

    }); 

我不知道我在这里做错了什么。我知道在JavaScript中默认长度为0,所以我如何获得这个值? BTW的var_dump在$ jsondata给出了数据

+0

我认为你有你的报价错误。用单引号替换 - 'var jsonData = JSON.parse('<?php echo $ jsondata;?>');'因为JSON字符串中包含双引号。 – techfoobar

+0

现在我得到一个Uncaught TypeError:无法读取未定义的属性'0'使用“”是迄今为止我读过的正确方法。 – Bazinga777

+0

验证你的json数据http://json.parser.online.fr/ –

回答

1

你打电话console.log(jsonData.timestamp[0]);这基本上意味着,在jsonData找到属性时间戳,这是一个数组并获得第一个索引。

但jsonData是数组,而不是时间戳。你可能应该像console.log(jsonData[0].timestamp);

+0

感谢它的工作完美 – Bazinga777

+0

我不知道这部分,所以非常感谢,将其选择为2分钟后的正确答案 – Bazinga777

+1

@ Bazinga777:我想知道这是如何工作的,因为'var jsonData = JSON.parse( “<?php echo $ jsondata;?>”);'应该产生无效的JavaScript。 –

2

在这里尝试使用单引号:

var jsonData = JSON.parse("<?php echo $jsondata; ?>"); 

替换有:

var jsonData = JSON.parse('<?php echo $jsondata; ?>'); 

因为$jsondata包含双引号("),字符串传递给JSON.parse()将被打破,导致JavaScript无效。

但是,正如Quentin回答的那样,整个JSON.parse是不必要的。
Like he answered,使用方法:var data = <?php echo $jsondata; ?>;

此外,你不正确的访问对象:

jsonData.timestamp[0]; 

应该是:

jsonData[0].timestamp; 

您的JSON是时间戳对象的数组,所以使用数组索引[0],首先。

+0

这还不够,JSON也包含新行。 – Quentin

+0

@Quentin:OP使用了'json_encode',它应该返回一个没有换行符的有效JSON字符串。我相信这只是提出问题的格式错误。 – Cerbrus

+0

也许漂亮的打印选项被使用? – Quentin

6

您的JSON数据包括"个字符。您正在尝试将其注入到以"分隔的JavaScript字符串文字中,但您并未转义数据中的"字符。

您的JSON还包含新行,JavaScript字符串中不允许使用文字换行,因此您需要用换码序列(\n)替换它们。

也就是说,JSON是JavaScript文字语法的一个子集,因此您不需要将JSON文本转换为JavaScript字符串文字然后解析它,您可以简单地使用JSON作为JavaScript :

var data = <?php echo $jsondata; ?>; 

您有另一个问题。您的JSON数据表示一个对象数组,而不是具有数组作为属性值的对象。您需要访问之前的属性名称:data[0].timestamp

+0

好吧,这是什么人与upvoting这个答案,而不是我的?我在单引号和数组访问的答案中速度更快,但是这个人因为288k代表而获得选票? – Cerbrus

+2

@Cerbrus:不,只是因为这是一个更好的答案。如果你不需要,为什么会使用'JSON.parse'?你的解决方案甚至不可靠:如果JSON数据包含'''会发生什么? –

+0

@Cerbrus如果你正在为代表做这件事,那么你是因为错误的理由做这件事的。我在这里S/O为4年。这是一个帮助人们的好地方。没有竞争。 – Shouvik