2017-06-26 7 views
-2

Je dispose d'un fichier .csv rubriques:convertir réponse fgetcsv en JSON spécifique

Description, BusinessSurname, IsCustomer, IsSupplier, AddressType, Business 
Address, IsInternational. 

Première rangée:

Contact1, Contact1, True, True, Business, 123 Fake St, False 

lignes restantes n'a pas d'importance, sa juste plus comme ça - des exemples. J'ai quelques rangées de données là-dedans.

Je dois obtenir dans ce format 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} 
] 
} 

J'ai essayé quelques façons différentes, mais aucun d'entre eux me donner spécifiquement un JSON comme celui-ci avec l'adresse imbriquée. Je peux laisser la deuxième adresse (adresse postale).

Si j'utilise ce code:

 $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; 
     }; 

Je reçois ceci par exemple:

["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"] 

Y at-il un moyen d'obtenir le JSON j'ai besoin, et si je ne peux pas obtenir le obligé json automatiquement, y at-il un moyen d'extraire les valeurs de chaque ligne et de les assigner à une variable, et de créer manuellement le json requis pour chaque ligne, en utilisant une boucle for, while loop, etc? EG:

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

avec les en-têtes csv - afficher les lignes csv – RomanPerekhrest

+0

J'ai montré un exemple des lignes csv. Merci. Et vous pouvez déjà voir ce qui était dans les lignes csv en regardant la sortie que je recevais. même chose essentiellement. – user8114890

+0

Répondu ici déjà: https://stackoverflow.com/questions/44781279/how-to-make-fgetcsv-to-be-the-json-i-wantadfasdgfasdf/44781458#44781458 –

Répondre

0

J'ai trouvé la réponse à cela, mais j'avais renoncé à ce critère d'évaluation de l'API et est allé à une plus simple sans imbrication. En raison de la rigueur du format json, cette API acceptera que j'ai essentiellement assigné chaque valeur de mon csv à une variable et créé manuellement le json nécessaire. Bien que ce code soit pour le point de terminaison Accounts, je peux utiliser exactement la même méthode pour n'importe quel point de terminaison, car je suis en train de créer manuellement le json. Et c'est la seule façon de travailler, je pense que certains champs sont des chaînes comme AccountName, certains entiers comme 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;