json - 如何使用序列化程序 (Symfony 4) 创建正确格式的 json 字符串?

标签 json symfony doctrine encode serialization

我正在使用序列化程序创建一个 json 字符串:

$table = $this->getDoctrine()->getRepository(Article::class)->findAll();

$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
$json_string = $serializer->serialize($table, 'json');

$表的结果:

array(2) { [0]=> object(App\Entity\Article)#5975 (3) { ["id":"App\Entity\Article":private]=> int(1) ["title":"App\Entity\Article":private]=> string(9) "Article 1" ["body":"App\Entity\Article":private]=> string(32) "This is the body for article one" } [1]=> object(App\Entity\Article)#5979 (3) { ["id":"App\Entity\Article":private]=> int(2) ["title":"App\Entity\Article":private]=> string(11) "Article Two" ["body":"App\Entity\Article":private]=> string(32) "This is the body for article two" } } 

这是 $json_string 的结果:

string(145) "[{"id":1,"title":"Article 1","body":"This is the body for article one"},{"id":2,"title":"Article Two","body":"This is the body for article two"}]" 

但这不是我需要的正确格式。我需要这样编码:

{
  "recordsTotal": 10,
  "recordsFiltered": 10,
  "draw": 1,
  "data": [
    [
      "Airi",
      "Satou",
      "Accountant",
      "Tokyo",
      "28th Nov 08",
      "$162,700"
    ],
    [
      "Angelica",
      "Ramos",
      "Chief Executive Officer (CEO)",
      "London",
      "9th Oct 09",
      "$1,200,000"
    ],
    [
      "Ashton",
      "Cox",
      "Junior Technical Author",
      "San Francisco",
      "12th Jan 09",
      "$86,000"
    ],
    [
      "Bradley",
      "Greer",
      "Software Engineer",
      "London",
      "13th Oct 12",
      "$132,000"
    ],
    [
      "Brenden",
      "Wagner",
      "Software Engineer",
      "San Francisco",
      "7th Jun 11",
      "$206,850"
    ],
    [
      "Brielle",
      "Williamson",
      "Integration Specialist",
      "New York",
      "2nd Dec 12",
      "$372,000"
    ],
    [
      "Bruno",
      "Nash",
      "Software Engineer",
      "London",
      "3rd May 11",
      "$163,500"
    ],
    [
      "Caesar",
      "Vance",
      "Pre-Sales Support",
      "New York",
      "12th Dec 11",
      "$106,450"
    ],
    [
      "Cara",
      "Stevens",
      "Sales Assistant",
      "New York",
      "6th Dec 11",
      "$145,600"
    ],
    [
      "Cedric",
      "Kelly",
      "Senior Javascript Developer",
      "Edinburgh",
      "29th Mar 12",
      "$433,060"
    ]
  ]
}

使用规范器的方法:

$normalizer = new ObjectNormalizer();
$encoder = new JsonEncoder();
$serializer = new Serializer(array($normalizer), array($encoder));
$json_string = $serializer->serialize($table, 'json');

结果:

string(145) "[{"id":1,"title":"Article 1","body":"This is the body for article one"},{"id":2,"title":"Article Two","body":"This is the body for article two"}]" 

最佳答案

我知道这是从 2018 年开始的。但是我需要给出这个解决方案,经过几个小时的研究我发现了这个:

$response = new Response($serializer->serialize($data, JsonEncoder::FORMAT, [JsonEncode::OPTIONS => JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT]));
$response->headers->set('Content-Type', 'application/json');
return $response;

在 Symfony 4.2 中对我来说工作得很好

关于json - 如何使用序列化程序 (Symfony 4) 创建正确格式的 json 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51492575/

相关文章:

rest - 在Silex/Symfony 2中没有模型的情况下验证POST数据?

mysql - Doctrine 和 symfony2 中的多个更新查询

doctrine-orm - "IN"带有标准过滤的谓词不起作用

c# - 带有 JSON 字符串的 IHttpActionResult

javascript - 我应该将 JSON 数据封装到 Javascript 对象中吗?

twig - 为什么在 "dump"环境中使用 if 语句时,twig 模板会抛出未知的 'dev' 函数?

php - 模块化 Zend Framework 应用程序和 Doctrine 集成和使用

javascript - d3js 汇总嵌套的 JSON 数组并求出总值

jquery - MVC JavaScriptSerializer反序列化json

security - Check_path 不在 symfony 的防火墙后面,如何纠正?