JSON TO CSV转换注意:数组转换为字符串

时间:2017-12-11 12:35:56

标签: php json csv

我正在尝试将JSON数据转换为CSV,但它说“注意:D7上的数组到字符串转换:第427行的D:\ xampp \ htdocs \ api.pharmarack.com \ Model \ ConverterModel.php”< /强>

MyJSON:

[
    {
        "FirmId": "1",
        "OrderNo": "RP89",
        "PartyCode": "7026",
        "Status":"Processed",
        "InvoiceNo":"INV123",
        "InvoiceDate": "2017-12-02",
        "OrderDate": "2017-12-02 11:43:38.321813",
        "OrderDetails": [
            {
                "Item": "ZAART 50 MGTAB",
                "ItemDetailId": "22047",
                "OrderedQty": "17",
                "ProcessedQty":"17",
                "ProcessedPTR":"24.5",
                "ProcessedMRP":"30.5"
            },
            {
                "Item": "RBTONE CAPS",
                "ItemDetailId": "6091",
                "OrderedQty": "10",
                "ProcessedQty":"0",
                "ProcessedPTR":"0",
                "ProcessedMRP":"0"
            },
            {
                "Item": "EBASIL 20MG",
                "ItemDetailId": "80253",
                "OrderedQty": "20",
                "ProcessedQty":"15",
                "ProcessedPTR":"45.0",
                "ProcessedMRP":"50.0"
            }
        ]
    },
    {
        "FirmId": "1",
        "OrderNo": "RP88",
        "PartyCode": "7025",
        "Status":"Processed",
        "InvoiceNo":"INV123",
        "InvoiceDate": "2017-12-02",
        "OrderDate": "2017-12-02 11:31:13.307100",
        "OrderDetails": [
            {
                "Item": "BG PROT L",
                "ItemDetailId": "83570",
                "OrderedQty": "20",
                "ProcessedQty":"15",
                "ProcessedPTR":"45.0",
                "ProcessedMRP":"50.0"
            },
            {
                "Item": "E ZINT LIQ",
                "ItemDetailId": "88417",
                "OrderedQty": "20",
                "ProcessedQty":"15",
                "ProcessedPTR":"45.0",
                "ProcessedMRP":"50.0"
            },
            {
                "Item": "A TO Z DROP",
                "ItemDetailId": "98165",
                "OrderedQty": "20",
                "ProcessedQty":"15",
                "ProcessedPTR":"45.0",
                "ProcessedMRP":"50.0"
            }
        ]
    }
]

PHP代码:

$fp = fopen($cfilename, 'w');
$data = json_decode($json, true);
$firstLineKeys = false;
foreach ($data as $line) {
    if (empty($firstLineKeys)) {
        $firstLineKeys = array_keys($line);
        fputcsv($fp, $firstLineKeys);
        $firstLineKeys = array_flip($firstLineKeys);
    }
    $line_array = array($line['FirmId'], $line['OrderNo'], $line['PartyCode'], $line['Status'], $line['InvoiceNo'], $line['InvoiceDate'], $line['OrderDate']);
    foreach ($line['OrderDetails'] as $valueItem) {
        $item_array = array($value['Item'], $value['ItemDetailId'], $value['OrderedQty'], $value['ProcessedQty'], $value['ProcessedPTR'], $value['ProcessedMRP']);
        array_push($line_array, $item_array);
    }
    fputcsv($fp, $line_array);
}

fclose($fp);

预期输出 enter image description here

2 个答案:

答案 0 :(得分:1)

问题似乎在于此,然后尝试将$ line_array放入csv ......

foreach ($line['OrderDetails'] as $value) {
    array_push($line_array, $value);
}

从JSON结构来看,此循环中的$值是一个数组,因为OrderDetails是对象数组。所以价值就像:

            {
                "Item": "ZAART 50 MGTAB",
                "ItemDetailId": "22047",
                "OrderedQty": "17",
                "ProcessedQty":"17",
                "ProcessedPTR":"24.5",
                "ProcessedMRP":"30.5"
            }

之后你将多维数组放入fputcsv:

fputcsv($fp, $line_array);

编辑:

例如将其更改为:

foreach ($line['OrderDetails'] as $value) {
    $line_array = array_merge($line_array, array_values($value));
}

答案 1 :(得分:1)

希望这会对你有所帮助:

<?php

$fp = fopen("demo.csv", 'w');
$data = json_decode($json, true);
$firstLineKeys = false;
foreach ($data as $line) {
    if (empty($firstLineKeys)) {
        $firstLineKeys = array_keys($line);
        $firstLineKeys = array_merge($firstLineKeys, array_keys($line['OrderDetails'][0]));
        unset($firstLineKeys['OrderDetails']);
        fputcsv($fp, $firstLineKeys);
        $firstLineKeys = array_flip($firstLineKeys);
    }
    $line_array = array($line['FirmId'], $line['OrderNo'], $line['PartyCode'], $line['Status'], $line['InvoiceNo'], $line['InvoiceDate'], $line['OrderDate']);
    foreach ($line['OrderDetails'] as $value) {
        $array = $line_array;
        array_push($array, $value['Item'], $value['ItemDetailId'], $value['OrderedQty'], $value['ProcessedQty'], $value['ProcessedPTR'], $value['ProcessedMRP']);
        fputcsv($fp, $array);
    }
}

fclose($fp);