2017-06-26 113 views
-2

我有標題的.CSV文件:轉換fgetcsv響應爲特定JSON

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循環等? EG:

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

以及csv標頭 - 顯示csv行 – RomanPerekhrest

+0

我已經展示了csv行的示例。謝謝。通過查看我得到的輸出,您可以看到csv行中的內容。基本一樣的東西。 – user8114890

+0

回答已在這裏:https://stackoverflow.com/questions/44781279/how-to-make-fgetcsv-to-be-the-json-i-wantadfasdgfasdf/44781458#44781458 –

回答

0

我找到了答案,但是我已經放棄了這個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;