PHP библиотека для преобразования JSON в CSV? - PullRequest
8 голосов
/ 06 марта 2012

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

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

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

или

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

Ответы [ 3 ]

11 голосов
/ 06 марта 2012

Я, как правило, согласен с комментаторами, но если ваши данные подготовлены таким образом, вам не нужен этот псевдокод?

$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);
2 голосов
/ 24 мая 2013

Мне просто нужно было сделать то же самое. Я написал небольшой скрипт командной строки, который принимает в качестве параметра файл 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));
}
2 голосов
/ 06 марта 2012

Примерно так должно работать, если предположить, что ваш 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...