12
votes

CSV à JSON avec PHP?

J'ai besoin de convertir un fichier csv en JSON sur le serveur à l'aide de PHP. J'utilise ce script qui fonctionne: xxx

la variable $ csv est une chaîne résultant d'une demande de courbure qui renvoie le contenu CSV.

Je suis sûr que ce n'est pas le code PHP le plus efficace de le faire parce que je suis un développeur débutant et ma connaissance de PHP est faible. Y a-t-il un moyen meilleur et plus efficace de convertir CSV en Json en utilisant php?

Merci d'avance.

Note. Je suis conscient que j'ajoute que j'ajoute des espaces et puis je le supprime, je le fais, donc je peux avoir la possibilité de retourner "lisible" JSON en supprimant la ligne $ JSON = Preg_replace ('/ [\ n] /', ' ', $ Json); à des fins de test.

Modifier. Merci pour vos réponses, en fonction de leur nouveau code: < Pré> xxx


0 commentaires

6 Réponses :


1
votes

quelques conseils ...

  • Si vous avez une ouverture d'URL activée pour fopen () et des emballages, vous pouvez utiliser fgetscsv () .
  • Vous pouvez créer un tableau de la CSV, puis la convertir avec le native JSON_ENCODE () .
  • Le type de mime correct pour JSON est Application / JSON .

1 commentaires

Merci, maintenant j'utilise json_encode () et corrigé le type MIME.



0
votes

Vous pouvez probablement réduire les frais généraux en supprimant tous les espaces et \ N. Mais c'est dans votre note.

Vous pouvez augmenter la performance en sautant le preg_replace et en passant un booléen qui l'allumerait et éteinte.

Autre que cela, la variable déroulante de votre VaR [1-10] est bien bonne, tant qu'il y a toujours dix varaibles.

L'explosion et l'approche de la forise sont bien bien.


1 commentaires

J'ai fini par éliminer les espaces en utilisant une solution beaucoup plus propre maintenant, merci.



24
votes

Eh bien il y a la fonction JSON_ENCEDODE () que vous devez utiliser plutôt que de construire vous-même la sortie JSON. Et il y a aussi une fonction str_getcsv () pour analyse CSV: xxx

Vous devez cependant adapter le tableau $ si vous souhaitez que la sortie JSON conserve des champs nommés.


2 commentaires

Merci beaucoup, c'est une solution vraiment propre, j'ai édité mon message avec le code que j'utilise maintenant en fonction de votre réponse Plus j'ai ajouté Array_Combine à la sortie JSON avec noms de propriété.


+1 qui bascule comme l'enfer. Je ne savais pas sur str_getcsv . Si vous savez également comment éviter de casser les cellules multilignes ...: D



0
votes

Je recommande d'utiliser COSEVA (une bibliothèque d'analyse de la CSV) et à l'aide de la méthode TOJSON (). xxx


0 commentaires

9
votes

J'ai modifié la réponse dans la question pour utiliser la première ligne de la CSV pour les touches de réseau. Cela présente l'avantage de ne pas avoir à cailler des clés dans la fonction permettant de fonctionner pour tout CSV avec des en-têtes de colonne et un nombre quelconque de colonnes.

Voici ma version modifiée: xxx


0 commentaires

1
votes

Aucune de ces réponses ne fonctionne avec des cellules multilignes, car elles supposent tous une ligne se termine par '\ n'. La fonction intégrée fgecsv code> comprend que les cellules multilignes sont enfermées dans "de sorte qu'elle ne fonctionne pas dans le même problème. Le code ci-dessous au lieu de s'appuyer sur" \ n "pour trouver chaque ligne d'un CSV laisse fgetcsv code> Go Row par ligne et préparez notre sortie.

function csv_to_json($file){

    $columns = fgetcsv($file); // first lets get the keys.
    $output = array(); // we will build out an array of arrays here.

    while(!feof($file)){ // until we get to the end of file, we'll pull in a new line
        $line = fgetcsv($file); // gets the next line
        $lineObject = array(); // we build out each line with our $columns keys
        foreach($columns as $key => $value){
            $lineObject[$value] = $line[$key];
        }
        array_push($output, $lineObject);
    }
    return json_encode($output); // encode it as json before sending it back
}


0 commentaires