2012-03-05 15 views
6

Ho un servizio JSON e ho bisogno di creare uno script per esportare i dati nei file CSV. Qualcuno ha un metodo o una libreria che può suggerire di migrare JSON in formato CSV?Libreria PHP per convertire JSON in CSV?

Ecco un formato di esempio anche se mi aspetto di avere a retrofit la soluzione per lavorare con esso:

{"service_name": 
     { key : value, key : value....} 
} 

o:

{"service_name": 
     [ 
       { key : value, key : value....}, 
       ... 
     ] 
} 
+1

si può fare il contrario di [questa domanda] (http://stackoverflow.com/questions/4811844/csv-to-json-with-php)? –

+5

Qual è la struttura del JSON? JSON può avere una struttura nidificata molto complessa che potrebbe essere impossibile rappresentare in modo significativo come un csv. – Chris

+0

http://stackoverflow.com/questions/4811844/csv-to-json-with-php –

risposta

9

io generalmente d'accordo con i commentatori, ma se si i dati sono preparati in questo modo, non è questo pseudo-codice tutto ciò di cui hai bisogno?

$json_str = "{'aintlist':[4,3,2,1], 'astringlist':['str1','str2']}"; 

$json_obj = json_decode ($json_str); 

$fp = fopen('file.csv', 'w'); 

foreach ($json_obj as $fields) { 
    fputcsv($fp, $fields); 
} 

fclose($fp); 
+1

Nel mio caso dovrei trasmettere (array) sui campi. PHP 5.3. –

1

Qualcosa del genere dovrebbe funzionare, supponendo che il JSON è un array di set di dati, senza array o oggetti incorporati:

$file = file_get_contents('http://example.com/blah/blah'); 
$json = json_decode($file); 

$csvfile = fopen('file.csv', 'w+'); 
foreach ($json as $row) { 
    $line = "'" . join("\",\"", $row) . "\"\n"; 
    fputs($csvfile, $line); 
} 
fclose($csvfile); 

Dovrete aggiungere appropriata gestione degli errori. Ci sono un sacco di cose che possono andare storte quando si cerca di fare questo genere di cose (cioè il file JSON non è disponibile o è malformattato, non è possibile creare un nuovo file CSV)

1

Ho solo bisogno di fare lo stesso. Ho scritto il piccolo script da riga di comando, che prende come parametro il file json e restituisce il CSV.

È possibile controllare qui: PHP Converting JSON array to CSV

Il personale importante non sta usando le chiavi della serie come prima riga nel file CSV. E mantenendo l'ordine sugli elementi successivi, per non rovinare il CSV.

Ecco il codice:

if (empty($argv[1])) die("The json file name or URL is missed\n"); 
$jsonFilename = $argv[1]; 

$json = file_get_contents($jsonFilename); 
$array = json_decode($json, true); 
$f = fopen('php://output', 'w'); 

$firstLineKeys = false; 
foreach ($array as $line) 
{ 
    if (empty($firstLineKeys)) 
    { 
     $firstLineKeys = array_keys($line); 
     fputcsv($f, $firstLineKeys); 
     $firstLineKeys = array_flip($firstLineKeys); 
    } 
    // Using array_merge is important to maintain the order of keys acording to the first element 
    fputcsv($f, array_merge($firstLineKeys, $line)); 
}