Библиотека PHP для преобразования JSON в CSV?

У меня есть служба JSON и вам нужно создать скрипт для экспорта данных в файлы CSV. Есть ли у кого-нибудь метод или библиотека, которые вы можете предложить перенести JSON в формат CSV?

Вот примерный формат, хотя, как я полагаю, для решения этой проблемы потребуется ретро-решение:

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

или:

 {"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); 

Что-то вроде этого должно работать, предполагая, что ваш 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-файл)

Мне просто нужно было сделать то же самое. Я написал небольшой скрипт командной строки, который принимает в качестве параметра json-файл и выводит CSV.

Вы можете проверить это здесь: PHP Преобразование массива JSON в 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)); }