【问题标题】:converting fgetcsv response into specific json将 fgetcsv 响应转换为特定的 json
【发布时间】:2017-06-26 11:19:37
【问题描述】:

我有一个带有标题的 .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}
]
}

我尝试了几种不同的方法,但没有一个专门给我这样的嵌套地址的 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,有没有办法可以提取每一行的值,并分配给一个变量,并手动创建所需的每行的json,使用for循环,while循环等?例如:

{
Description: $description,
SurnameBusinessName: $BusinessSurname,
etc...
}

【问题讨论】:

  • 连同 csv 标题 - 显示 csv 行
  • 我已经展示了 csv 行的示例。谢谢。通过查看我得到的输出,您已经可以看到 csv 行中的内容。基本上是一样的。
  • 已经在这里回答了:stackoverflow.com/questions/44781279/…

标签: php arrays json fgetcsv


【解决方案1】:

我找到了这个问题的答案,但是我已经放弃了这个 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; 

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多