Построение JSON с детьми - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь создать свой JSON, чтобы он выглядел так ... с __children: [, идущим сразу после Qty Shipped: null,

[
    {
        'Job Number': '22983321',
        'LN #': null,
        'Description': null,
        'Qty': null,
        'AS400 Ship Date': null,
        'Date Showed on Report': null,
        'Days to Manufacture': null,
        'Notes': null,
        'Date Shown Completed': null,
        'Actual Ship Date': null,
        'Qty Shipped': null,
        __children: [
            {
                //values here
            },
        ]
    },
]

С моим текущим кодом я получаю следующее:

{
    "0": {
        "Job Number": "22359501",
        "LN #": null,
        "Description": null,
        "Qty": null,
        "AS400 Ship Date": null,
        "Date Showed on Report": null,
        "Days to Manufacture": null,
        "Notes": null,
        "Date Shown Completed": null,
        "Actual Ship Date": null,
        "Qty Shipped": null
    },
    "_children": [
        {
            //values here
        },
    ]
}

Это мой текущий код:

$checkJob = '';

//output data into spreadsheet view
while($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    if ($checkJob == $job_number) {
        //print "<b>checkJob: " . $checkJob . " | " . "currentJob: " . $job_number . "</b><br>";
        $json['__children'][] = array(
            'LN #' => $line_item,
            'Description' => $description,
            'Qty' => $qty,
            'AS400 Ship Date' => $as400_ship_date,
            'Date Showed on Report' => $date_showed_on_report,
            'Days to Manufacture' => "5",
            'Notes' => $notes,
            'Date Shown Completed' => $date_shown_complete,
            'Actual Ship Date' => $actual_ship_date,
            'Qty Shipped' => $qty_shipped
        );
    }
    else {
        $checkJob = $job_number;
        //print "checkJob: " . $checkJob . " | " . "currentJob: " . $job_number . "<br>";
        $json[] = array(
            'Job Number' => $job_number,
            'LN #' => null,
            'Description' => null,
            'Qty' => null,
            'AS400 Ship Date' => null,
            'Date Showed on Report' => null,
            'Days to Manufacture' => null,
            'Notes' => null,
            'Date Shown Completed' => null,
            'Actual Ship Date' => null,
            'Qty Shipped' => null,
        );
    }
}

Я попытался изменить $json[][] = array( на $json['__children'][] = array(, и он все еще неправильно структурирует JSON. Я пытаюсь построить JSON, используя встроенные функции, как было предложено ...

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

Вы можете l oop поверх данных, проверяя, есть ли базовый набор данных для каждого номера задания (используя isset()), а затем просто добавить дочерние данные для каждого l oop ...

while($row = $stmt->fetch(PDO::FETCH_BOUND)) {
    if ( !isset($json[$job_number]))  {
        $json[$job_number] = array(
            'Job Number' => $job_number,
            'LN #' => null,
            'Description' => null,
            'Qty' => null,
            'AS400 Ship Date' => null,
            'Date Showed on Report' => null,
            'Days to Manufacture' => null,
            'Notes' => null,
            'Date Shown Completed' => null,
            'Actual Ship Date' => null,
            'Qty Shipped' => null,
        );
    }
    $json[$job_number]['__children'][] = array(
            'LN #' => $line_item,
            'Description' => $description,
            'Qty' => $qty,
            'AS400 Ship Date' => $as400_ship_date,
            'Date Showed on Report' => $date_showed_on_report,
            'Days to Manufacture' => "5",
            'Notes' => $notes,
            'Date Shown Completed' => $date_shown_complete,
            'Actual Ship Date' => $actual_ship_date,
            'Qty Shipped' => $qty_shipped
        );
    }
}
// Remove job number keys
$json = array_values($json);
1 голос
/ 26 марта 2020

Вы должны сделать это так.

$json[0]['__children'] = array();
...