2012-03-05 24 views
6

Bir JSON hizmetim var ve verileri CSV dosyalarına vermek için bir komut dosyası oluşturmanız gerekiyor. JSON'u CSV biçimine geçirmenizi önerebileceğiniz bir yöntem veya kitaplık var mı?PHP Library JSON to CSV dönüştürebilirsiniz?

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

ya:

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

sen [Bu soruya] tersini yapabilir (http://stackoverflow.com/questions/4811844/csv-to-json-with-php): Burada

kodudur? –

+5

JSON'un yapısı nedir? JSON, bir csv olarak anlamlı bir şekilde render edilmesi mümkün olmayan çok karmaşık, iç içe bir yapıya sahip olabilir. – Chris

+0

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

cevap

9

i genellikle Yorum yapanlar katılıyorum, ama eğer onunla çalışmak için çözüm retro sığdırmak zorunda bekliyoruz gerçi Burada

örnek bir biçimdir Veriler bu şekilde hazırlandı, ihtiyacınız olan bu sahte kod değil mi? Uygun hata işleme eklemek gerekecek

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

: Böyle

$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

Benim durumumda alanlara (dizi) atmak istiyorum. PHP 5.3. –

1

şey çalışmalı, sizin JSON varsayarak diziler veya gömülü nesneler olmaksızın veri kümelerinin bir dizidir. Bu tür bir şey yapmaya çalışırken yanlış gidebilecek pek çok şey var (yani JSON dosyası mevcut değil veya malformatted, yeni CSV dosyası oluşturamıyor)

1

Sadece aynısını yapmam gerekiyor. Ben json dosyasını bir parametre olarak alıp CSV'yi çıkaran küçük komut satırı komut dosyasını yazdım.

Burada kontrol edebilirsiniz: PHP Converting JSON array to CSV

önemli personel CSV dosyasındaki ilk satırı olarak dizinin anahtarlarını orada kullanıyor. Ve sonraki elemanların sırasını koruyarak, CSV'yi dağıtmamak için.

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