构建多维 json 对象


Building a multidimensional json object

我正在构建税收计算器,我已经能够为一个键构建一个JSON对象。 我需要扩展它以再有 3 个对象,但我遇到了麻烦。

目前,我可以这样做做净收入:

$a       = array();
$a_json      = array();
$a_json_row  = array();
$a_json_row2  = array();
$a_json_final      = array();

if ($queryIndexData) {
    while($row = mysql_fetch_array($queryIndexData)) {
        $person      = $row['person'];
        $netincome = $row['NetIncome'];
        $statetax  = $row['StateTax'];
        $fedtax    = $row['FedTax'];
        $totaltax  = $row['TotalTax'];
        $a = array(
            'label' => $person,
            'value' => $netincome * 1,
        );
        array_push($a_json, $a);

     }
    $a_json_row2[key] = 'Net Income';
    $a_json_row2[values] = $a_json;
    array_push($a_json_final, $a_json_row2);
// jQuery wants JSON data
echo json_encode($a_json_final);

它不是很干净,我硬编码了密钥。 如何从$netincome、$statetax、$fedtax和$totaltax变量动态生成密钥?

所以我的 JSON 看起来像:

var tax_data = [
    {
        key: 'Net Income',
        values: [
                    {
                        "label" : "John Doe" ,
                        "value" : 1000000
                    } ,
                    {
                        "label" : "Jane Doe" ,
                        "value" : 1500000
                    } ,
                ]
            },
    {
        key: 'State and City Taxes',
        values: [
                    {
                        "label" : "John Doe" ,
                        "value" : 1000000 
                    } ,
                    {
                        "label" : "Jane Doe" ,
                        "value" : 1500000 
                    } ,
                ]
            },
    {
        key: 'Federal Taxes',
        values: [
                    {
                        "label" : "John Doe" ,
                        "value" : 1000000
                    } ,
                    {
                        "label" : "Jane Doe" ,
                        "value" : 1500000
                    } ,
                ]
            },
    {
        key: 'Total Due',
        values: [
                    {
                        "label" : "John Doe" ,
                        "value" : 1000000  
                    } ,
                    {
                        "label" : "Jane Doe" ,
                        "value" : 1500000 
                    } ,
                ]
            }
        ];

这样的事情应该可以工作,尽管这是一种相当奇怪的数据排列方式。请注意,构造$array[] = 1array_push($array, 1) 相同(并且比 更常见(。另外,不要使用mysql_*函数。

$keys = array(
    "NetIncome"=>"Net Income",
    "State Tax"=>"State and City Taxes",
    "FedTax"=>"Federal Taxes",
    "TotalTax"=>"Total Due"
);
while($row = mysql_fetch_array($queryIndexData)) {
    foreach ($keys as $column=>$keys) {
        $a_json[$column][] = array(
            'label' => $row["person"],
            'value' => $row[$column] * 1,
        );
    }
}
foreach ($keys as $column=>$key) {
    $a_json_final[] = array(
        "key"=>$key,
        "values"=>$a_json[$column]
    );
}
// jQuery wants JSON data
echo json_encode($a_json_final);