Search code examples
symfony4jms-serializer

JMSSerializer end line sign


I'd like to serialize entities in symfony. config config/packages/jms_serializer.yaml

jms_serializer:
    visitors:
        xml:
            format_output: '%kernel.debug%'
#    metadata:
#        auto_detection: false
#        directories:
#            any-name:
#                namespace_prefix: "My\\FooBundle"
#                path: "@MyFooBundle/Resources/config/serializer"
#            another-name:
#                namespace_prefix: "My\\BarBundle"
#                path: "@MyBarBundle/Resources/config/serializer"

    default_context:
        serialization:
            serialize_null: true
            version: ~
            enable_max_depth_checks: true
        deserialization:
            serialize_null: true
            version: ~
            enable_max_depth_checks: true

Now in contoller src/Controller/TempController.php

/**
* @Route("/tools/amm/{amm}", name="_amm")
*/
public function ammTestAction(AccessModule $amm, SerializerInterface $serializer){

$data = $serializer->serialize($amm, 'json');
dump($data);
print_r($data);

    return $this->render('base.html.twig', ['data' => $data]);
}

This is only test getting and serializig data. The goal is to save serialized data in database. In debug data I have strange '\n' characters and when I save this in database this is inserted too.

profiler debug

"""
{\n
    "id": 3,\n
    "name": "Boss",\n
    "children": [\n
        {\n
            "id": 4,\n
            "name": "Technican Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        {\n
            "id": 5,\n
            "name": "Office Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        {\n
            "id": 6,\n
            "name": "Storage Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        }\n
    ],\n
    "parent": {\n
        "id": 2,\n
        "name": "Administrator",\n
        "children": [\n
            null\n
        ],\n
        "parent": {\n
            "id": 1,\n
            "name": "System Administrator",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        "routes": [\n
            null,\n
            null\n
        ]\n
    },\n
    "routes": [\n
        {\n
            "id": 5,\n
            "route": "api_admin_access_access_routes",\n
            "name": "api_admin_access_access_routes",\n
            "path": "/api/admin/access/routes",\n
            "access_modules": []\n
        }\n
    ]\n
}
"""

Question

How should I configure jms_serializer to prevent inserting end of line sign?


Solution

  • If you use Composer Flex to install JMS_Serializer, the recipe set a config for dev environment with JSON_PRETTY_PRINT in it.

    So, you have to edit config/packages/dev/jms_serializer.yaml and remove JSON_PRETTY_PRINT

    Your file should look like that :

    jms_serializer:
        visitors:
            json:
                options:
                    - JSON_UNESCAPED_SLASHES
                    - JSON_PRESERVE_ZERO_FRACTION
    

    It's also usefull when using FOS_Elastica & JMS_Serializer