2012-03-05 48 views
6

Tôi có dịch vụ JSON và cần tạo tập lệnh để xuất dữ liệu sang tệp CSV. Có ai có một phương pháp hoặc thư viện mà bạn có thể đề xuất để di chuyển JSON sang định dạng CSV không?Thư viện PHP để chuyển đổi JSON sang CSV?

Dưới đây là một định dạng ví dụ mặc dù tôi hy vọng sẽ có retro-phù hợp với những giải pháp để làm việc với nó:

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

hay:

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

bạn có thể làm điều ngược lại của [câu hỏi này] (http://stackoverflow.com/questions/4811844/csv-to-json-with-php)? –

+5

Cấu trúc của JSON là gì? JSON có thể có cấu trúc lồng nhau rất phức tạp, có thể không thể hiển thị có ý nghĩa như một csv. – Chris

+0

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

Trả lời

9

tôi thường đồng ý với bình luận, nhưng nếu bạn dữ liệu được chuẩn bị theo cách này, không phải là mã giả này tất cả các bạn cần?

$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

Trong trường hợp của tôi tôi muốn đúc (mảng) trên các trường. PHP 5.3. –

1

Something như thế này nên làm việc, giả sử JSON của bạn là một mảng của bộ dữ liệu mà không mảng hoặc đối tượng nhúng:

$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ạn sẽ có thêm xử lý lỗi thích hợp. Có rất nhiều điều có thể xảy ra khi cố gắng thực hiện loại điều này (tức là tệp JSON không khả dụng hoặc không đúng định dạng, không thể tạo tệp CSV mới)

1

Tôi chỉ cần thực hiện tương tự. Tôi đã viết kịch bản lệnh dòng lệnh nhỏ, lấy tham số là tệp json và xuất CSV.

Bạn có thể kiểm tra xem nó ở đây: PHP Converting JSON array to CSV

Các nhân viên quan trọng có được sử dụng các phím của mảng như dòng đầu tiên trong tập tin CSV. Và duy trì thứ tự trên các yếu tố tiếp theo, để không làm hỏng CSV.

Đây là mã:

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)); 
} 
Các vấn đề liên quan