2014-02-18 75 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