2012-03-05 52 views
6

Tengo un servicio JSON y necesito crear una secuencia de comandos para exportar datos a archivos CSV. ¿Alguien tiene un método o una biblioteca que pueda sugerir para migrar JSON al formato CSV?Biblioteca PHP para convertir JSON a CSV?

He aquí un ejemplo de formato, aunque espero tener para la reconversión de la solución para trabajar con él:

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

o:

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

puede hacer a la inversa de [esta cuestión] (http://stackoverflow.com/questions/4811844/csv-to-json-with-php)? –

+5

¿Cuál es la estructura de JSON? JSON puede tener una estructura anidada muy compleja que puede ser imposible de representar de manera significativa como un csv. – Chris

+0

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

Respuesta

9

por lo general de acuerdo con los comentaristas, pero si Los datos están preparados de esta manera, ¿no es este pseudocódigo todo lo que necesitas?

$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

En mi caso, debería lanzar (matriz) en los campos. PHP 5.3. –

1

Algo como esto debería funcionar, asumiendo que su JSON es una serie de conjuntos de datos sin matrices u objetos incrustados:

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

Vas a tener que añadir el control de errores apropiado. Hay muchas cosas que pueden salir mal al intentar hacer este tipo de cosas (es decir, el archivo JSON no está disponible o está malformateado, no puede crear un nuevo archivo CSV)

1

Solo necesitaba hacer lo mismo. Escribí el pequeño script de línea de comando, que toma como parámetro el archivo json y saca el CSV.

Puede verificarlo aquí: PHP Converting JSON array to CSV

El personal importante allí está utilizando claves de matriz como la primera fila en el archivo CSV. Y mantener el orden en los siguientes elementos, para no estropear el CSV.

Aquí está el código:

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