2012-03-05 10 views
6

JSONサービスがあり、データをCSVファイルにエクスポートするスクリプトを作成する必要があります。 JSONをCSV形式に移行する方法やライブラリをお持ちの方はいらっしゃいますか?私は、一般的にコメンターに同意JSONをCSVに変換するPHPライブラリですか?

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

あなたは[この質問](http://stackoverflow.com/questions/4811844/csv-to-json-with-php)の逆の操作を行うことができます。ここでは

は、コードのですか? –

+5

JSONの構造は何ですか? JSONは、非常に複雑でネストされた構造を持つことができ、意味のある形でCSVとしてレンダリングすることは不可能です。 – Chris

+0

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

答えて

9

が、あなたの場合:

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

か:

は、ここで私はそれで動作するようにレトロフィットソリューションに持っていることを期待してもフォーマット例ですデータはこのように準備されていますが、この擬似コードは必要なものではありませんか?

$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

私の場合、私はフィールドに(配列)をキャストしたいと思います。 PHP 5.3。 –

1

このような何かはあなたのJSONは配列や埋め込みオブジェクトのないデータセットの配列であると仮定すると、動作するはずです:

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

あなたは適切なエラー処理を追加する必要があります。 JSONファイルが利用できない、または不正な形式であるため、新しいCSVファイルを作成できません)

1

これを実行するだけで済みます。私はパラメータとしてjsonファイルをとり、CSVを出力する小さなコマンドラインスクリプトを書いた。

あなたはここでそれを確認することができます。PHP Converting JSON array to CSV

重要なスタッフが、CSVファイルの最初の行として配列のキーが使用されます。 CSVを台無しにしないように、次の要素の順序を維持する。

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)); 
} 
関連する問題