我正在尝试将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);
答案 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);