2013-10-11 119 views
0

是否有一个快速的方法,而不使用一系列复杂的for循环(使用类似Underscore的东西?或对我的MySQL查询的改进?)采取我的数据,格式化在一个平坦的列表这样的:平面MySQL查询嵌套JSON对象

[ 
    { 
    "J_NUM": "BOAK-1212", 
    "X_DUE_DATE": "2012-06-20T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Mail List Due", 
    }, 
    { 
    "J_NUM": "BOAK-1212", 
    "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Vendor Specs 2", 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "X_DUE_DATE": "2012-06-11T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Client Final Approval", 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Vendor Specs 2", 
    } 
] 

而基于某些参数,在这种情况下J_NUM,巢/组,以便它出来是这样的:

[ 
    { 
    "J_NUM": "BOAK-1212", 
    "SCHEDULE_SERIES": [ 
     { 
     "X_DUE_DATE": "2012-06-20T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Mail List Due", 
     }, 
     { 
     "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Vendor Specs 2", 
     } 
    ] 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "SCHEDULE_SERIES": [ 
     { 
     "X_DUE_DATE": "2012-06-11T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Client Final Approval", 
     }, 
     { 
     "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Vendor Specs 2", 
     } 
    ] 
    } 
] 

回答

0

用Underscore表示出来。

_.groupBy(theData, 'J_NUM')将返回以下:

{"BOAK-1212":[ 
    {"J_NUM":"BOAK-1212", 
    "X_DUE_DATE":"2012-06-20T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Mail List Due"}, 
    {"J_NUM":"BOAK-1212", 
    "X_DUE_DATE":"2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Vendor Specs 2"} 
], 
"JEFF-2000":[ 
    {"J_NUM":"JEFF-2000", 
    "X_DUE_DATE":"2012-06-11T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Client Final Approval"}, 
    {"J_NUM":"JEFF-2000", 
    "X_DUE_DATE":"2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Vendor Specs 2"} 
]} 
2

在while循环,你可以建立你想要的输出:

$query = "SELECT ..."; 
$result = mysqli_query($link, $query); 
$out = array(); 
while($row=mysqli_fetch_assoc($result)) { 
    $J_NUM = $row['J_NUM']; 
    if(!array_key_exists($J_NUM, $out)) { 
    $out[$J_NUM] = array("J_NUM" => $J_NUM, "SCHEDULE_SERIES" => array()); 
    } 
    $out[$J_NUM]['SCHEDULE_SERIES'][] = array(
    "X_DUE_DATE" => $row['X_DUE_DATE'], 
    "X_LEAD_TIME" => $row['X_LEAD_TIME'], 
    "X_NAME"  => $row['X_NAME']); 
} 
$out = json_encode(array_values($out), true); 
+0

非常感谢你的帮助,但我一直在寻找的JavaScript的东西。我使用Underscore库中的groupBy找到解决方案。 –