2013-03-07 24 views
4

我現在有一個來自服務器的JSON響應,但是我想根據日期對其進行重構。對於e.g我現在有重組JSON

{ 
"items": 
    [ 
     { 
      "A": [ 
       { 
        "name": "a", 
        "date": "2/10/2010", 
        "sales": "100" 
       }, 
       { 
        "name": "b", 
        "date": "6/10/2010", 
        "sales": "400" 
       } 
      ], 
      "B": [ 
       { 
        "name": "c", 
        "date": "2/10/2010", 
        "sales": "1000" 
       }, 
       { 
        "name": "d", 
        "date": "6/10/2010", 
        "sales": "400" 
       } 
      ] 
     }, 
     { 
      "C": [ 
       { 
        "name": "a", 
        "date": "10/10/2010", 
        "sales": "100" 
       }, 
       { 
        "name": "b", 
        "date": "6/10/2010", 
        "sales": "100" 
       } 
      ], 
      "D": [ 
       { 
        "name": "c", 
        "date": "2/10/2010", 
        "sales": "300" 
       }, 
       { 
        "name": "c", 
        "date": "2/10/2010", 
        "sales": "1100" 
       } 
      ] 
     } 
    ] 
} 

,但現在我想按日期進行重組,某一天需要知道所有的銷售有像,

{ 
    "date1" : [sales, sales, sales], 
    "date2" : [sales, sales], 
    "date3" : [sales] 
    } 

如何才能做到這一點?

+0

你能確認你的JSON結構嗎?就像現在這樣,它是無效的。 – 2013-03-07 19:10:04

+1

您的JSON無效。你有什麼想要做的? – 2013-03-07 19:10:36

+0

你是手動解析JSON,還是讓jQuery爲你解析它?如果手動,你可以使用[reviver函數](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse)。 – bfavaretto 2013-03-07 19:12:15

回答

4

我只能假設,你想這樣的:

var arr = JSON.parse(response); // or something like that (assuming valid JSON) 
           // or just assign the array literal 

var result = {}; 
for (var i=0; i<arr.length; i++) { 
    var date = arr[i].date, 
     sales = arr[i].sales; 
    if (date in result) 
     result[date].push(sales); 
    else 
     result[date] = [sales]; 
} 
+0

@MikeRobinson:'in'真的很好。在你的編輯中使用'hasOwnProperty'也有類似的問題。 – Bergi 2013-03-07 19:21:14

+0

編輯之後,我做了更多的閱讀。你是對的。很好的解決方案。 – 2013-03-07 19:21:59

+0

它的工作原理。謝謝 – devang 2013-03-07 23:47:00

0

假設你得到你的JSON摸索出:

<?php 
$list = array(
    array(
     'product' => 'a', 
     'date'  => '2012-08-01', 
     'sales'  => 500, 
    ), 
    array(
     'product' => 'b', 
     'date'  => '2012-08-02', 
     'sales'  => 600, 
    ), 
    array(
     'product' => 'c', 
     'date'  => '2012-08-01', 
     'sales'  => 250, 
    ), 
    array(
     'product' => 'd', 
     'date'  => '2012-08-02', 
     'sales'  => 800, 
    ), 
); 

echo json_encode($list); 
?> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script> 
var JSON = '<?php echo json_encode($list); ?>'; 
var pJson = jQuery.parseJSON(JSON); 

var cArray = new Array(); 

for each (i in pJson) { 
     if (typeof cArray[i.date] == 'undefined') { 
       cArray[i.date] = Array(); 
     } 
     cArray[i.date].push(i.sales); 
} 
</script> 

我加入了PHP的部分顯示JSON字符串應該是什麼樣子。這個解決方案也需要jQuery。

+0

沒有理由將JSON作爲字符串輸出到腳本中,只需輸出Object字面值即可。而你的方式非常容易出錯,因爲你忘了逃避JSON字符串。我只能用一個包含''''或'''的JSON值來嘗試,並且你的解決方案會崩潰 – Bergi 2013-03-08 13:51:02

+0

我理解Bergi,PHP和輸出JSON只是簡單的讓他/她看到一個有效的JSON字符串。假設他的JSON字符串已經制定完畢,對不起,在您回答後發帖,我沒有刷新頁面。 – Ghost 2013-03-08 16:06:15