J'ai besoin de convertir un fichier la variable 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? strong> p> Merci d'avance. P> strong> Note. strong> 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 $ csv code> est une chaîne résultant d'une demande de courbure qui renvoie le contenu CSV. P>
$ JSON = Preg_replace ('/ [\ n] /', ' ', $ Json); code> à des fins de test. p>
6 Réponses :
quelques conseils ... p>
fopen () code> et des emballages, vous pouvez utiliser fgetscsv () code>
. li>
- Vous pouvez créer un tableau de la CSV, puis la convertir avec le native
JSON_ENCODE () CODE>
. LI>
- Le type de mime correct pour JSON est
Application / JSON CODE>. LI>
ul>
Merci, maintenant j'utilise json_encode () et corrigé le type MIME.
Vous pouvez probablement réduire les frais généraux en supprimant tous les espaces et \ N. Mais c'est dans votre note. p>
Vous pouvez augmenter la performance en sautant le preg_replace et en passant un booléen qui l'allumerait et éteinte. P>
Autre que cela, la variable déroulante de votre VaR [1-10] est bien bonne, tant qu'il y a toujours dix varaibles. P>
L'explosion et l'approche de la forise sont bien bien. P>
J'ai fini par éliminer les espaces en utilisant une solution beaucoup plus propre maintenant, merci.
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: Vous devez cependant adapter le tableau $ si vous souhaitez que la sortie JSON conserve des champs nommés. P> P>
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 code>. Si vous savez également comment éviter de casser les cellules multilignes ...: D
Je recommande d'utiliser COSEVA (une bibliothèque d'analyse de la CSV) et à l'aide de la méthode TOJSON ().
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:
p>
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
}