如何使用 Symfony 编码 CSV

Posted

技术标签:

【中文标题】如何使用 Symfony 编码 CSV【英文标题】:How to encoder Csv with Symfony 【发布时间】:2018-03-04 06:32:45 【问题描述】:

我用的是序列化组件的symfony,有一个例子可以序列化和Object to JSON格式,下一个:

    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new ObjectNormalizer());

    $person = new \AppBundle\Entity\Person();
    $person->setName('foo');
    $person->setAge(99);
    $person->setSportsman(false);

    // return new JsonResponse($person); // empty

    $serializer = new Serializer($normalizers, $encoders);

    /**
     * 1 param - object to be serialized
     * 2 param - proper encoder, in this case JsonEncoder
     * @var [type]
     */
    $jsonContent = $serializer->serialize($person, 'json');

    return new Response($jsonContent);

上面的例子返回如下内容:

"id":null,"age":99,"name":"foo","sportsman":false

但我想知道如何做同样的事情,改为CSV 而不是JSON

【问题讨论】:

symfony.com/blog/…??? 【参考方案1】:

CSV 和 YAML 编码器从 Symfony 3.2 开始添加

// instantiation, when using it as a component
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\CsvEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

$serializer = new Serializer([new ObjectNormalizer()], [new CsvEncoder()]);

// instantiation, when using it inside the Symfony framework
$serializer = $container->get('serializer');

// encoding contents in CSV format
$serializer->encode($data, 'csv');

// decoding CSV contents
$data = $serializer->decode(file_get_contents('data.csv'), 'csv');

您可以在此处找到更多信息:https://symfony.com/blog/new-in-symfony-3-2-csv-and-yaml-encoders-for-serializer

【讨论】:

我尝试了相同的代码,但得到了一个空数组。第一个 $serializer 变量有什么用?

以上是关于如何使用 Symfony 编码 CSV的主要内容,如果未能解决你的问题,请参考以下文章

如何调试 Symfony StreamedResponse?

如何在 Symfony 路由中使用锚点?

如何使用 sklearn 对 CSV 文件中的多列进行一次热编码?

如何在 symfony 中返回 json 编码格式错误

如何将本地 csv 文件的内容保存到“硬编码”Pandas DataFrame 中?

如何使用 jq 将任意简单 JSON 转换为 CSV?