{"id":1131,"date":"2025-06-12T13:45:54","date_gmt":"2025-06-12T05:45:54","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1131.html"},"modified":"2025-06-12T13:45:54","modified_gmt":"2025-06-12T05:45:54","slug":"symfony-%e5%a6%82%e4%bd%95%e5%9c%a8twig%e6%a8%a1%e6%9d%bf%e4%b8%ad%e8%a7%a3%e7%a0%81json","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1131.html","title":{"rendered":"Symfony: \u5982\u4f55\u5728Twig\u6a21\u677f\u4e2d\u89e3\u7801JSON"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Twig&#27169;&#26495;&#24341;&#25806;&#26469;&#22788;&#29702;&#21644;&#26174;&#31034;JSON&#25968;&#25454;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#22312;Twig&#27169;&#26495;&#20013;&#35299;&#30721;JSON&#30340;&#27493;&#39588;&#65306;<\/p>\n<h3>1. &#23433;&#35013;&#24517;&#35201;&#30340;&#21253;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#24050;&#32463;&#23433;&#35013;&#20102;<code>symfony\/twig-bundle<\/code>&#21644;<code>twig\/extra-bundle<\/code>&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/twig-bundle twig\/extra-bundle<\/code><\/pre>\n<h3>2. &#37197;&#32622;Twig<\/h3>\n<p>&#22312;<code>config\/packages\/twig.yaml<\/code>&#25991;&#20214;&#20013;&#21551;&#29992;Twig&#25193;&#23637;&#65306;<\/p>\n<pre><code class=\"language-yaml\">twig:\n    extra:\n        json_decode_filter: true<\/code><\/pre>\n<h3>3. &#22312;&#25511;&#21046;&#22120;&#20013;&#36820;&#22238;JSON&#25968;&#25454;<\/h3>\n<p>&#22312;&#20320;&#30340;&#25511;&#21046;&#22120;&#20013;&#36820;&#22238;JSON&#25968;&#25454;&#26102;&#65292;&#21487;&#20197;&#20351;&#29992;<code>json_encode<\/code>&#20989;&#25968;&#36827;&#34892;&#32534;&#30721;&#65292;&#24182;&#22312;&#35270;&#22270;&#20013;&#20351;&#29992;<code>json_decode_filter<\/code>&#36807;&#28388;&#22120;&#36827;&#34892;&#35299;&#30721;&#12290;<\/p>\n<pre><code class=\"language-php\">use SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\n\nclass ExampleController extends AbstractController\n{\n    public function indexAction()\n    {\n        \/\/ &#31034;&#20363;JSON&#25968;&#25454;\n        $jsonData = [\n            'name' =&gt; 'John Doe',\n            'age' =&gt; 30,\n            'email' =&gt; 'john.doe@example.com'\n        ];\n\n        \/\/ &#20351;&#29992;json_encode&#23558;PHP&#25968;&#32452;&#36716;&#25442;&#20026;JSON&#23383;&#31526;&#20018;\n        $jsonString = json_encode($jsonData);\n\n        \/\/ &#36820;&#22238;&#21709;&#24212;&#65292;&#20351;&#29992;json_decode_filter&#36807;&#28388;&#22120;&#35299;&#30721;JSON&#23383;&#31526;&#20018;\n        return new JsonResponse([\n            'decodedData' =&gt; $this-&gt;container-&gt;get('twig')-&gt;filter($jsonString, 'json_decode'),\n        ]);\n    }\n}<\/code><\/pre>\n<h3>4. &#22312;Twig&#27169;&#26495;&#20013;&#26174;&#31034;JSON&#25968;&#25454;<\/h3>\n<p>&#22312;&#20320;&#30340;Twig&#27169;&#26495;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>{{ decodedData }}<\/code>&#26469;&#26174;&#31034;&#35299;&#30721;&#21518;&#30340;&#25968;&#25454;&#12290;<\/p>\n<pre><code class=\"language-twig\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Decoded JSON Data&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Decoded JSON Data&lt;\/h1&gt;\n    {{ decodedData|raw }}\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#25511;&#21046;&#22120;&#20013;&#36820;&#22238;JSON&#25968;&#25454;&#24182;&#22312;Twig&#27169;&#26495;&#20013;&#26174;&#31034;&#23427;&#65306;<\/p>\n<h4>&#25511;&#21046;&#22120; (<code>src\/Controller\/ExampleController.php<\/code>)<\/h4>\n<pre><code class=\"language-php\">namespace AppController;\n\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\nuse SymfonyComponentHttpFoundationJsonResponse;\n\nclass ExampleController extends AbstractController\n{\n    public function indexAction()\n    {\n        \/\/ &#31034;&#20363;JSON&#25968;&#25454;\n        $jsonData = [\n            'name' =&gt; 'John Doe',\n            'age' =&gt; 30,\n            'email' =&gt; 'john.doe@example.com'\n        ];\n\n        \/\/ &#20351;&#29992;json_encode&#23558;PHP&#25968;&#32452;&#36716;&#25442;&#20026;JSON&#23383;&#31526;&#20018;\n        $jsonString = json_encode($jsonData);\n\n        \/\/ &#36820;&#22238;&#21709;&#24212;&#65292;&#20351;&#29992;json_decode_filter&#36807;&#28388;&#22120;&#35299;&#30721;JSON&#23383;&#31526;&#20018;\n        return new JsonResponse([\n            'decodedData' =&gt; $this-&gt;container-&gt;get('twig')-&gt;filter($jsonString, 'json_decode'),\n        ]);\n    }\n}<\/code><\/pre>\n<h4>Twig &#27169;&#26495; (<code>templates\/index.html.twig<\/code>)<\/h4>\n<pre><code class=\"language-twig\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Decoded JSON Data&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Decoded JSON Data&lt;\/h1&gt;\n    {{ decodedData|raw }}\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Symfony&#26694;&#26550;&#20013;&#25104;&#21151;&#22320;&#22312;Twig&#27169;&#26495;&#20013;&#35299;&#30721;JSON&#25968;&#25454;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#20351;&#29992;Symfony&#26102;&#65292;&#19968;&#20010;&#38750;&#24120;&#27969;&#34892;&#30340;PHP&#26694;&#26550;&#65292;&#24320;&#21457;&#20154;&#21592;&#32463;&#24120;&#36935;&#21040;&#38656;&#35201;&#22312;Twig&#27169;&#26495;&#20013;&#28210;&#26579;JSON&#25968;&#25454;&#30340;&#24517;&#35201;&#24615;&#12290;Twig&#20316;&#20026;Symfony&#40664;&#35748;&#30340;&#27169;&#26495;&#24341;&#25806;&#65292;&#20026;&#35774;&#35745;&#21644;&#28210;&#26579;&#26381;&#21153;&#22120;&#31471;UI&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#29615;&#22659;&#12290;&#28982;&#32780;&#65292;&#22312;Twig&#20013;&#22788;&#29702;JSON&#21487;&#33021;&#19981;&#20250;&#19968;&#24320;&#22987;&#23601;&#26174;&#24471;&#24456;&#30452;&#35266;&#12290;&#26412;&#25945;&#31243;&#26088;&#22312;&#25581;&#24320;&#22914;&#20309;&#22312;Twig&#27169;&#26495;&#20013;&#30452;&#25509;&#35299;&#30721;JSON&#30340;&#31070;&#31192;&#38754;&#32433;&#12290;&#26080;&#35770;&#24744;&#26159;&#22312;&#23581;&#35797;&#26174;&#31034;&#37197;&#32622;&#25968;&#25454;&#12289;&#28040;&#36153;API&#36824;&#26159;&#20165;&#22312;&#21518;&#31471;&#19982;&#21069;&#31471;&#20043;&#38388;&#20256;&#36882;&#20449;&#24687;&#65292;&#29702;&#35299;&#22914;&#20309;&#22312;Twig&#20013;&#35299;&#30721;JSON&#37117;&#26159;&#38750;&#24120;&#26377;&#20215;&#20540;&#30340;&#25216;&#33021;&#12290;<\/p><p>&#21069;&#32622;&#26465;&#20214;&#65306;<\/p><p>&#29616;&#26377;Symfony&#39033;&#30446;&#38656;&#35201;&#36827;&#34892;&#24037;&#20316;&#12290;<\/p><p>&#29087;&#24713;Twig&#27169;&#26495;&#24341;&#25806;<\/p><p>&#22522;&#26412;&#30340;Symfony&#26694;&#26550;&#30693;&#35782;<\/p><h2>&#29702;&#35299;JSON&#21644;Twig&#30340;&#22522;&#30784;&#30693;&#35782;<\/h2><p>JSON&#65288;JavaScript Object Notation&#65289;&#26159;&#19968;&#31181;&#36731;&#37327;&#32423;&#30340;&#25968;&#25454;&#20132;&#25442;&#26684;&#24335;&#65292;&#23427;&#26131;&#20110;&#20154;&#31867;&#38405;&#35835;&#21644;&#32534;&#20889;&#65292;&#20063;&#26131;&#20110;&#26426;&#22120;&#35299;&#26512;&#21644;&#29983;&#25104;&#12290;JSON &#26159;&#19968;&#31181;&#25991;&#26412;&#32467;&#26500;&#65292;&#24182;&#19988;&#24120;&#29992;&#20110;&#24322;&#27493;&#27983;&#35272;&#22120;\/&#26381;&#21153;&#22120;&#36890;&#20449;&#65292;&#36890;&#24120;&#26367;&#20195;XML&#12290;<\/p><p>&#33922;&#26684;&#65288;Twig&#65289;&#26159;&#19968;&#31181;&#20026;PHP&#35774;&#35745;&#30340;&#29616;&#20195;&#27169;&#26495;&#24341;&#25806;&#12290;&#23427;&#28789;&#27963;&#12289;&#24555;&#36895;&#19988;&#23433;&#20840;&#12290;&#33922;&#26684;&#20801;&#35768;&#24744;&#32534;&#20889;&#31616;&#27905;&#32780;&#34920;&#36798;&#21147;&#24378;&#30340;&#27169;&#26495;&#65292;&#36825;&#20123;&#27169;&#26495;&#33021;&#22815;&#23558;&#19994;&#21153;&#36923;&#36753;&#19982;&#21576;&#29616;&#36923;&#36753;&#20998;&#24320;&#65292;&#20174;&#32780;&#20419;&#36827;&#25972;&#27905;&#30340;&#35774;&#35745;&#12290;<\/p><h2>&#20004;&#31181;&#26041;&#27861;&#26469;&#35299;&#26512;JSON&#22312;Twig&#20013;<\/h2><p>&#22312;Symfony&#20013;&#22788;&#29702;JSON&#36890;&#24120;&#26377;&#20004;&#31181;&#26041;&#27861;&#65306;<\/p><p>&#22312;Twig&#27169;&#26495;&#20013;&#20351;&#29992;&#33258;&#23450;&#20041;&#30340;Twig&#25193;&#23637;&#26469;&#35299;&#30721;JSON&#12290;<\/p><p>&#22312;&#25511;&#21046;&#22120;&#20013;&#35299;&#30721;JSON&#25968;&#25454;&#24182;&#23558;&#20854;&#20316;&#20026;&#20851;&#32852;&#25968;&#32452;&#20256;&#36882;&#32473;Twig&#12290;<\/p><h3>&#26041;&#27861;1&#65306;&#22312;&#25511;&#21046;&#22120;&#20013;&#35299;&#30721;JSON&#25968;&#25454;<\/h3><p>&#22788;&#29702;JSON&#25968;&#25454;&#30340;&#26631;&#20934;&#26041;&#27861;&#26159;&#22312;&#25511;&#21046;&#22120;&#20013;&#35299;&#30721;&#23427;&#65292;&#28982;&#21518;&#20877;&#23558;&#20854;&#20256;&#36882;&#32473;Twig&#27169;&#26495;&#12290;&#36825;&#31181;&#20570;&#27861;&#36981;&#24490;&#36923;&#36753;&#65292;&#21363;&#25511;&#21046;&#22120;&#24212;&#35813;&#20026;&#21576;&#29616;&#20934;&#22791;&#25152;&#26377;&#25968;&#25454;&#65292;&#20174;&#32780;&#20351;Twig&#27169;&#26495;&#23613;&#21487;&#33021;&#31616;&#21333;&#12290;<\/p><h4>&#27493;&#39588;&#24335;&#31034;&#20363;<\/h4><p>&#22312;&#24744;&#30340;Symfony&#25511;&#21046;&#22120;&#20013;&#65306;<\/p><p>&#23558;&#20851;&#32852;&#25968;&#32452;&#20256;&#36882;&#32473;Twig&#27169;&#26495;&#20316;&#20026;&#28210;&#26579;&#26041;&#27861;&#30340;&#21442;&#25968;&#20043;&#19968;&#12290;<\/p><p>&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>json_decode()<\/code>PHP&#20989;&#25968;&#65292;&#21363;&#21407;&#29983;&#30340;PHP&#20989;&#25968;&#65292;&#29992;&#20110;&#23558;JSON&#35299;&#30721;&#20026;&#19968;&#20010;PHP&#20851;&#32852;&#25968;&#32452;&#12290;<\/p><p>&#33719;&#21462;&#21407;&#22987;&#30340;JSON&#25968;&#25454;&#12290;&#36825;&#21487;&#33021;&#26159;&#20174;&#37197;&#32622;&#25991;&#20214;&#12289;&#25968;&#25454;&#24211;&#25110;&#22806;&#37096;API&#20013;&#33719;&#24471;&#30340;&#12290;<\/p><pre><code>\/\/ src\/Controller\/YourController.php\n\n\/\/ ... Other use statements ...\nuse SymfonyComponentHttpFoundationResponse;\n\n\/\/ ...\n\npublic function index(): Response\n{\n    \/\/ Assume $jsonData is your JSON string\n    $decodedJson = json_decode($jsonData, true);\n\n    return $this-&gt;render('your_template.twig', [\n        'data' =&gt; $decodedJson,\n    ]);\n}\n<\/code><\/pre><p>&#22312;&#24744;&#30340;Twig&#27169;&#26495;&#20013;&#65306;<\/p><pre><code>{# templates\/your_template.twig #}\n\n{% for item in data %}\n{{ item.property }}\n{% endfor %}\n<\/code><\/pre><p>&#36825;&#31181;&#26041;&#27861;&#31616;&#21333;&#26126;&#20102;&#65292;&#36981;&#24490;MVC&#65288;&#27169;&#22411;-&#35270;&#22270;-&#25511;&#21046;&#22120;&#65289;&#21407;&#21017;&#12290;&#28982;&#32780;&#65292;&#26377;&#26102;&#24320;&#21457;&#20154;&#21592;&#21487;&#33021;&#38656;&#35201;&#22312;Twig&#27169;&#26495;&#20013;&#30452;&#25509;&#22788;&#29702;JSON&#25968;&#25454;&#65292;&#32780;&#19981;&#38656;&#35201;&#36890;&#36807;&#25511;&#21046;&#22120;&#36827;&#34892;&#35299;&#30721;&#12290;<\/p><h3>&#26041;&#27861; 2&#65306;&#21019;&#24314;&#33258;&#23450;&#20041;&#30340;Twig&#25193;&#23637;<\/h3><p>&#22312;Twig&#27169;&#26495;&#20013;&#25805;&#32437;JSON&#65292;&#20320;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340;Twig&#25193;&#23637;&#12290;&#36825;&#31181;&#26041;&#27861;&#27604;&#22312;&#25511;&#21046;&#22120;&#20013;&#35299;&#30721;&#26356;&#22797;&#26434;&#65292;&#20294;&#20026;&#24744;&#25552;&#20379;&#22312;Twig&#27169;&#26495;&#20869;&#26356;&#22823;&#30340;&#28789;&#27963;&#24615;&#12290;<\/p><h4>&#21019;&#24314;&#33258;&#23450;&#20041;Twig&#25193;&#23637;&#30340;&#27493;&#39588;&#65306;<\/h4><p>&#22312;&#24744;&#30340;Twig&#27169;&#26495;&#20013;&#20351;&#29992;&#33258;&#23450;&#20041;&#36807;&#28388;&#22120;&#26469;&#35299;&#30721;JSON&#23383;&#31526;&#20018;&#12290;<\/p><p>&#22312;Symfony&#20013;&#27880;&#20876;&#33258;&#23450;&#20041;&#30340;Twig&#25193;&#23637;&#20026;&#26381;&#21153;&#12290;<\/p><p>&#32534;&#20889;&#29992;&#20110;&#35299;&#30721;JSON&#30340;&#36923;&#36753;&#65292;&#20197;&#20415;&#22312;&#24744;&#30340;&#33258;&#23450;&#20041;&#36807;&#28388;&#22120;&#20013;&#20351;&#29992;&#12290;<\/p><p>&#28155;&#21152;&#19968;&#20010;&#26032;&#30340;Twig&#36807;&#28388;&#22120;&#65292;&#36890;&#36807;&#35206;&#30422;&#36807;&#28388;&#22120;&#23454;&#29616;&#12290;<code>getFilters()<\/code>&#26041;&#27861;&#12290;<\/p><p>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#26356;&#22810;&#30340;&#20449;&#24687;&#25110;&#38656;&#27714;&#65292;&#20197;&#20415;&#25105;&#33021;&#22815;&#24110;&#21161;&#24744;&#21019;&#24314;&#19968;&#20010;&#26032;PHP&#31867;&#12290;<code>TwigExtensionAbstractExtension<\/code>&#24050;&#32463;&#25910;&#21040;&#25351;&#20196;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><p>&#20197;&#19979;&#26159;&#21019;&#24314;&#31616;&#21333;Twig&#25193;&#23637;&#30340;&#31034;&#20363;&#29255;&#27573;&#65306;<\/p><pre><code>\/\/ src\/Twig\/JsonDecodeExtension.php\n\nnamespace AppTwig;\n\nuse TwigExtensionAbstractExtension;\nuse TwigTwigFilter;\n\nclass JsonDecodeExtension extends AbstractExtension\n{\n    public function getFilters(): array\n    {\n        return [\n            new TwigFilter('json_decode', [$this, 'jsonDecode']),\n        ];\n    }\n\n    public function jsonDecode(string $json)\n    {\n        return json_decode($json, true);\n    }\n}\n<\/code><\/pre><p>&#22312; services.yaml &#20013;&#65306;<\/p><pre><code>\/\/ config\/services.yaml\n\nservices:\n    \/\/ ...\n    AppTwigJsonDecodeExtension:\n        tags:\n            - { name: twig.extension }\n<\/code><\/pre><p>&#26368;&#21518;&#65292;&#22312;&#20320;&#30340;Twig&#27169;&#26495;&#20013;&#20351;&#29992;&#23427;&#65306;<\/p><pre><code>{# templates\/your_template.twig #}\n\n{% set jsonData = '{\"key\": \"value\"}' %}\n{% set data = jsonData|json_decode %}\n{{ data.key }}<\/code><\/pre><p>&#35013;&#39280;&#25151;&#23376;&#30340;<code>json_decode<\/code>&#36825;&#26679;&#65292;&#25105;&#20204;&#21487;&#20197;&#22312;Twig&#27169;&#26495;&#20013;&#20351;&#29992;&#23427;&#65292;&#20174;&#32780;&#22312;&#25105;&#20204;&#30340;&#35270;&#22270;&#20013;&#30452;&#25509;&#21033;&#29992;PHP&#30340;&#21407;&#29983;JSON&#22788;&#29702;&#33021;&#21147;&#12290;<\/p><h2>&#23433;&#20840;&#32771;&#34385;<\/h2><p>&#22312;&#22788;&#29702;JSON&#25968;&#25454;&#26102;&#65292;&#29305;&#21035;&#26159;&#22312;&#20174;&#22806;&#37096;&#26469;&#28304;&#25110;&#29992;&#25143;&#36755;&#20837;&#20013;&#33719;&#21462;&#26102;&#65292;&#24212;&#35686;&#24789;&#28508;&#22312;&#30340;&#23433;&#20840;&#39118;&#38505;&#65292;&#22914;XSS&#25915;&#20987;&#12290;&#23613;&#21487;&#33021;&#22320;&#36827;&#34892;&#25968;&#25454;&#28165;&#27927;&#21644;&#39564;&#35777;&#65292;&#20999;&#21247;&#30450;&#30446;&#20449;&#20219;&#36755;&#20837;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;Symfony&#30340;Twig&#27169;&#26495;&#20013;&#36827;&#34892;JSON&#35299;&#30721;&#21487;&#20197;&#36890;&#36807;&#25511;&#21046;&#22120;&#36731;&#26494;&#23454;&#29616;&#65292;&#25110;&#32773;&#36890;&#36807;&#20351;&#29992;&#33258;&#23450;&#20041;&#30340;Twig&#25193;&#23637;&#26469;&#33719;&#24471;&#26356;&#31934;&#32454;&#30340;&#25511;&#21046;&#25110;&#37325;&#22797;&#20351;&#29992;&#12290;&#20511;&#21161;&#36825;&#20123;&#26041;&#27861;&#65292;&#24744;&#29616;&#22312;&#21487;&#20197;&#26377;&#25928;&#22320;&#31649;&#29702;JSON&#25968;&#25454;&#20110;&#24744;&#30340;Symfony&#39033;&#30446;&#20013;&#12290;&#26681;&#25454;&#24212;&#29992;&#31243;&#24207;&#30340;&#38656;&#27714;&#36873;&#25321;&#27491;&#30830;&#30340;&#22788;&#29702;&#26041;&#24335;&#65292;&#24744;&#21487;&#20197;&#21033;&#29992;Symfony&#21644;Twig&#32467;&#21512;&#65292;&#21019;&#24314;&#19968;&#20010;&#30001;JSON&#25968;&#25454;&#39537;&#21160;&#30340;&#24378;&#22823;&#29992;&#25143;&#30028;&#38754;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#35201;&#22312;Twig&#27169;&#26495;&#20013;&#35299;&#30721;JSON&#25968;&#25454;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<code>json_decode()<\/code>&#20989;&#25968;&#12290;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#22522;&#30784;&#30340;PHP&#20989;&#25968;&#65292;&#29992;&#20110;&#23558;&#23383;&#31526;&#20018;&#36716;&#25442;&#20026;JSON&#23545;&#35937;&#12290;<\/p>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#30830;&#20445;&#20320;&#22312;&#39033;&#30446;&#20013;&#21253;&#21547;&#20102;JSON&#25193;&#23637;&#12290;&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#23433;&#35013;JSON&#25193;&#23637;&#65292;&#35831;&#25191;&#34892;&#20197;&#19979;&#25805;&#20316;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require symfony\/json-converter<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#22312;&#20320;&#30340;Twig&#27169;&#26495;&#25991;&#20214;&#20013;&#65292;&#21487;&#20197;&#36825;&#26679;&#20351;&#29992;<code>json_decode()<\/code>&#20989;&#25968;&#26469;&#35299;&#30721;JSON&#25968;&#25454;&#65306;<\/p>\n<pre><code class=\"language-twig\">{{ json_decode($data) | json_encode }}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code>$data<\/code>&#26159;&#20320;&#35201;&#35299;&#30721;&#30340;JSON&#23383;&#31526;&#20018;&#12290;<code>| json_encode<\/code>&#26159;&#22312;&#36755;&#20986;&#20043;&#21069;&#23545;&#32467;&#26524;&#36827;&#34892;&#32534;&#30721;&#30340;&#31649;&#36947;&#65288;pipe&#65289;&#65292;&#23427;&#20250;&#25226;&#20219;&#20309;&#26410;&#22788;&#29702;&#30340;&#38169;&#35823;&#25243;&#20986;&#12290;<\/p>\n<p>&#27880;&#24847;&#65306;&#36825;&#20010;&#26041;&#27861;&#21482;&#33021;&#35299;&#30721;&#31616;&#21333;&#30340;JSON&#26684;&#24335;&#65292;&#19981;&#33021;&#22788;&#29702;&#22797;&#26434;&#30340;&#23884;&#22871;&#32467;&#26500;&#25110;&#32773;&#38750;JSON&#26684;&#24335;&#30340;&#25968;&#25454;&#12290;&#22914;&#26524;&#20320;&#24819;&#22788;&#29702;&#26356;&#22797;&#26434;&#30340;&#24773;&#20917;&#65292;&#20320;&#21487;&#33021;&#38656;&#35201;&#20351;&#29992;&#31532;&#19977;&#26041;&#24211;&#22914;PsrJsonJson&#31867;&#25110;&#20854;&#20182;&#31867;&#20284;&#24037;&#20855;&#12290;<\/p>\n<p>&#20363;&#22914;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentHttpFoundationJsonResponse;\nuse SymfonyComponentHttpFoundationRequest;\n\nclass MyController extends Controller\n{\n    public function handleRequestAction(Request $request)\n    {\n        $response = new JsonResponse(['message' =&gt; 'Hello, World!']);\n\n        \/\/ &#35299;&#26512; JSON &#25968;&#25454;\n        if ($request-&gt;isXmlHttpRequest()) {\n            $data = json_decode($response-&gt;getContent(), true);\n            return ['result' =&gt; $data];\n        }\n\n        return new JsonResponse(['error' =&gt; 'Invalid request method. Only XMLHttpRequest is supported.'], 405);\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#26816;&#26597;&#35831;&#27714;&#26159;&#21542;&#20026;XMLHttpRequest&#65292;&#24182;&#26681;&#25454;&#24773;&#20917;&#36820;&#22238;&#19981;&#21516;&#30340;&#21709;&#24212;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312;Symfony&#26694;&#26550;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Twig&#27169;&#26495;&#24341;&#25806;&#26469;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1131","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1131"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1131"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1131"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}