将 fgetcsv 响应转换为特定 json
converting fgetcsv response into specific json
我有一个带有标题的 .CSV 文件:
Description, BusinessSurname, IsCustomer, IsSupplier, AddressType, Business
Address, IsInternational.
第一行:
Contact1, Contact1, True, True, Business, 123 Fake St, False
剩余的行不重要,它更像是 - 示例。我那里有几行数据。
我需要把它变成这种格式 json:
{
Description:'Desc_47AE3208-87F5-4BBA-BE40-AA4130AB4768',
SurnameBusinessName:'Name_Business',
IsCustomer:true,
IsSupplier:true,
Addresses:
[
{AddressType:'Business',Line1:'addr1_bus',IsInternational:false},
{AddressType:'Postal',Line1:'addr1_pos',IsInternational:true}
]
}
我尝试了几种不同的方法,但其中 none 专门给我一个 json 这样的地址嵌套。我可以省略第二个地址(邮政地址)。
如果我使用此代码:
$filename = 'contacts1.csv';
$handle = fopen($filename, 'r');
$count = 0;
while (($data = fgetcsv($handle)) !== FALSE) {
$count++;
if ($count == 1){
continue;
}
$json = json_encode($data, true);
echo $json;
};
我得到这个例子:
["Contact1","Contact1","TRUE","TRUE","Business","123 High Street Sydney NSW 2000","FALSE"]
["Contact2","Contact2","TRUE","TRUE","Business","124 High Street Sydney NSW 2000","FALSE"]
["Contact3","Contact3","TRUE","TRUE","Business","125 High Street Sydney NSW 2000","FALSE"]
有没有办法得到我需要的json,如果我不能自动得到所需的json,有没有办法提取每一行的值,以及分配给一个变量,并使用 for 循环、while 循环等为每一行手动创建所需的 json?例如:
{
Description: $description,
SurnameBusinessName: $BusinessSurname,
etc...
}
我找到了这个问题的答案,但是我已经放弃了这个 API 端点并转向了一个没有嵌套的更简单的端点。由于 json 格式的严格性,此 API 将接受我基本上将我的 csv 中的每个值分配给一个变量并手动创建所需的 json。虽然下面的代码是针对 Accounts 端点的,但我可以对任何端点使用完全相同的方法,因为我有点手动创建 json。我认为这是唯一可行的方法,因为有些字段是字符串,如 AccountName,有些是整数,如 AcountType。
$file = 'acc.csv';
$mode = 'r';
$handle = fopen($file, $mode);
while(($csv = fgetcsv($handle)) !==FALSE){
foreach($csv as $row => $value){
$data = $row.$value;
switch ($row){
case '0':
$accounttype = $value;
break;
case '1':
$accountname = $value;
break;
case '2':
$hint = $value;
break;
case '3':
$status = $value;
break;
case '4':
$sortorder = $value;
break;
case '5':
$accountcode = $value;
break;
case '6':
$parentaccountcatid = $value;
$json = "
{
AccountType:" . $accounttype . ",
AccountName:'" . $accountname . "',
Hint:'" . $hint . "',
Status:" . $status . ",
SortOrder:" . $sortorder . ",
AccountCode:'" . $accountcode . "',
ParentAccountingCategoryID:'" . $parentaccountcatid . "'
}";
//echo $json;
我有一个带有标题的 .CSV 文件:
Description, BusinessSurname, IsCustomer, IsSupplier, AddressType, Business
Address, IsInternational.
第一行:
Contact1, Contact1, True, True, Business, 123 Fake St, False
剩余的行不重要,它更像是 - 示例。我那里有几行数据。
我需要把它变成这种格式 json:
{
Description:'Desc_47AE3208-87F5-4BBA-BE40-AA4130AB4768',
SurnameBusinessName:'Name_Business',
IsCustomer:true,
IsSupplier:true,
Addresses:
[
{AddressType:'Business',Line1:'addr1_bus',IsInternational:false},
{AddressType:'Postal',Line1:'addr1_pos',IsInternational:true}
]
}
我尝试了几种不同的方法,但其中 none 专门给我一个 json 这样的地址嵌套。我可以省略第二个地址(邮政地址)。
如果我使用此代码:
$filename = 'contacts1.csv';
$handle = fopen($filename, 'r');
$count = 0;
while (($data = fgetcsv($handle)) !== FALSE) {
$count++;
if ($count == 1){
continue;
}
$json = json_encode($data, true);
echo $json;
};
我得到这个例子:
["Contact1","Contact1","TRUE","TRUE","Business","123 High Street Sydney NSW 2000","FALSE"]
["Contact2","Contact2","TRUE","TRUE","Business","124 High Street Sydney NSW 2000","FALSE"]
["Contact3","Contact3","TRUE","TRUE","Business","125 High Street Sydney NSW 2000","FALSE"]
有没有办法得到我需要的json,如果我不能自动得到所需的json,有没有办法提取每一行的值,以及分配给一个变量,并使用 for 循环、while 循环等为每一行手动创建所需的 json?例如:
{
Description: $description,
SurnameBusinessName: $BusinessSurname,
etc...
}
我找到了这个问题的答案,但是我已经放弃了这个 API 端点并转向了一个没有嵌套的更简单的端点。由于 json 格式的严格性,此 API 将接受我基本上将我的 csv 中的每个值分配给一个变量并手动创建所需的 json。虽然下面的代码是针对 Accounts 端点的,但我可以对任何端点使用完全相同的方法,因为我有点手动创建 json。我认为这是唯一可行的方法,因为有些字段是字符串,如 AccountName,有些是整数,如 AcountType。
$file = 'acc.csv';
$mode = 'r';
$handle = fopen($file, $mode);
while(($csv = fgetcsv($handle)) !==FALSE){
foreach($csv as $row => $value){
$data = $row.$value;
switch ($row){
case '0':
$accounttype = $value;
break;
case '1':
$accountname = $value;
break;
case '2':
$hint = $value;
break;
case '3':
$status = $value;
break;
case '4':
$sortorder = $value;
break;
case '5':
$accountcode = $value;
break;
case '6':
$parentaccountcatid = $value;
$json = "
{
AccountType:" . $accounttype . ",
AccountName:'" . $accountname . "',
Hint:'" . $hint . "',
Status:" . $status . ",
SortOrder:" . $sortorder . ",
AccountCode:'" . $accountcode . "',
ParentAccountingCategoryID:'" . $parentaccountcatid . "'
}";
//echo $json;