2015-11-03 61 views
1

我正在學習JSON,所以我有點困惑與數據格式,數組,對象和字符串。如何將Json數據格式化爲期望的格式並循環遍歷?

首先,我需要這種格式的數據(在jQuery頁面中)。這個對象還是數組?

var data = [[2015-10-29 11:35:33, 315.71], [2015-10-29 11:36:33, 317.45], [2015-10-29 11:38:52, 317.50], [2015-10-29 11:42:08, 315.86], [2015-10-29 11:43:32, 314.93], [2015-10-29 11:50:00, 313.19], [2015-10-29 11:35:33, 313.34]]; 

但是我卻越來越喜歡這個(在PHP頁面)。這是字符串嗎?

var data = [{"bv ":"27590","datey ":"2015-10-29 11:35:33"},{"bv ":"27590","datey ":"2015-10-29 11:36:33"},{"bv ":"27590","datey ":"2015-10-29 11:37:31"},{"bv ":"27590","datey ":"2015-10-29 11:38:34"},{"bv ":"27590","datey ":"2015-10-29 11:38:52"},{"bv ":"27590","datey ":"2015-10-29 11:39:15"},{"bv ":"27590","datey ":"2015-10-29 11:42:08"},{"bv ":"27590","datey ":"2015-10-29 11:42:48"},{"bv ":"27590","datey ":"2015-10-29 11:43:32"},{"bv ":"27590","datey ":"2015-10-29 11:50:00"}]; 

當我收到data(從PHP頁面如上)在通過AJAX jQuery的頁面,

enter image description here

SO我收到的,我想正確的格式數據[[2015-10-29 11:35:33, 315.71], [2015-10-29 11:36:33, 317.45]]以及如何迭代這組數據?

有人幫助我理解這裏涉及的數據格式和遍歷它們的方式。

我想:

1)

for(i=0; i < data.length; i++) 
{ 
    alert(data.[i].datey);//says undefined 
} 

2)

$.each(data, function(i, item) { 
    alert(data[i].datey);//doesn't show any alert 
    }) 

這是我的AJAX和PHP腳本,供大家參考:

$(function(){ 
    var data; 
    $.ajax({ 
    dataType: "json", 
    url: 'query_sales.php', 
    success: function(data){ 
     alert(data); 
    /*$.each(data, function(i, item) { 
    alert(data[i].datey); 
    });​*/ 
    }//close success 
    });//close ajax 
});//close function 

PHP腳本:

$acceptedUser = new search(); 
$sales = $acceptedUser->get_sales_graph(); 
$before = array(); 
foreach($sales as $k=>$v) 
{ 

    array_push($before,array("bv "=>$v['total_bv'],"datey "=>$v['as_of_date'])); 

} 
echo json_encode($before); 
+0

'2015年10月29日11:35:33'數組中會導致錯誤。 – Jai

+0

你試過'$ .each'的部分你試過'alert(item.datey)'嗎? – roullie

+0

@roullie,我喜歡,警報(data [i] .datey); – 112233

回答

1

您可以嘗試改變這一點:

array_push($before,array("bv"=>$v['total_bv'],"datey"=>$v['as_of_date'])); 
//--------------------------^^---------------------^^--you have spaces in your keys 

然後在成功的功能,你可以這樣做:

success: function(data){ 
    var arr = []; 
    $.each(data, function(i, item){ 
     arr.push([item.bv, item.datey]) 
    });  
} 

收銀臺下面的示例:

var data = [{"bv":"27590","datey":"2015-10-29 11:35:33"},{"bv":"27590","datey":"2015-10-29 11:36:33"},{"bv":"27590","datey":"2015-10-29 11:37:31"},{"bv":"27590","datey":"2015-10-29 11:38:34"},{"bv":"27590","datey":"2015-10-29 11:38:52"},{"bv":"27590","datey":"2015-10-29 11:39:15"},{"bv":"27590","datey":"2015-10-29 11:42:08"},{"bv":"27590","datey":"2015-10-29 11:42:48"},{"bv":"27590","datey":"2015-10-29 11:43:32"},{"bv":"27590","datey":"2015-10-29 11:50:00"}]; 
 
var arr = []; 
 
$.each(data, function(i, item){ 
 
    arr.push([+item.bv, item.datey]) 
 
}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(arr) + '</pre>';
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

我認爲它有效。你能說出我最初獲得的數據格式和我想要的數據格式,只是爲了我的知識嗎? – 112233

+0

你沒有任何十進制值在你的JSON,因爲我看到。儘管您可以使用'+ item.bv'和'+ item.datey'將這些值轉換爲數字。但是''''的時間會給你帶來問題,最好把它當作字符串表示。 – Jai

+0

@Vani查看我對你的問題的答案命名。 –

1

您的第一個var data無效。你的第二個是一組對象。

你試過:

for(i=0; i < data.length; i++) 
{ 
    alert(data.[i].datey);//says undefined 
} 

但你的屬性名稱是 「datey」,而不是 「datey」。所以,你必須訪問它是這樣的:

for(i=0; i < data.length; i++) 
{ 
    alert(data.[i]["datey "]); 
} 

或更好的解決您的PHP刪除多餘的空格:

array_push($before,array("bv"=>$v['total_bv'],"datey"=>$v['as_of_date'])); 
+0

但爲什麼第一個是無效的耶? – 112233

+0

因爲您有兩種類型的數據:字符串和數字。並且你的第一個'var data'具有像'2015-10-29 11:35:33'這樣的值,它們不是字符串(因爲它們沒有被引號包圍)而不是數字(因爲它們具有像空格那樣的附加字符)。如果你用引號把它們全部包圍起來,它們將會變得有效,但仍然不是很好的JSON,因爲它們沒有被命名。 –

+0

現在我明白了。你能幫助我嗎?我問了一個新問題,現在我認爲它與數據格式問題密切相關..http://stackoverflow.com/questions/33494970/graph-in-flot-js-not-formed-via-data-that-supplied通過ajax?noredirect = 1#comment54773948_33494970 – 112233