You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中向json_decode的JSON字符串嵌入变量失败的求助

问题分析与解决方案

你碰到的问题其实很常见——PHP里单引号包裹的字符串不会解析任何变量,哪怕你用了{$variable}这种插值语法也没用,单引号里的所有内容都会被当作纯字面量输出。

看你的代码,整个JSON字符串是用单引号'括起来的,所以里面的{$email}和{$actualAmount}根本不会被PHP识别为变量,自然就直接输出字面量了。

下面给你几种可行的解决办法,按推荐程度排序:

方法1:先构建PHP数组,再转JSON(推荐)

这是最稳妥、可读性最高的方式,完全避开字符串变量嵌入的问题:

// 先定义包含变量的PHP数组
$bodyArray = [
    'sender_batch_header' => [
        'email_subject' => 'SDK payouts test txn'
    ],
    'items' => [
        [
            'recipient_type' => 'EMAIL',
            'receiver' => $email, // 直接使用变量
            'note' => 'Your 1$ payout',
            'sender_item_id' => 'Test_txn_12',
            'amount' => [
                'currency' => 'CHF',
                'value' => $actualAmount // 直接使用变量
            ]
        ]
    ]
];

// 转成JSON字符串后再解码为关联数组(如果需要的话)
$body = json_decode(json_encode($bodyArray), true);

这种方式不仅能正确解析变量,还能避免手动写JSON时容易出现的语法错误(比如漏转义引号)。

方法2:改用双引号包裹字符串(需转义内部双引号)

PHP双引号字符串会解析变量插值,但要注意把JSON里的双引号用反斜杠转义:

$body= json_decode( "{ \"sender_batch_header\": { \"email_subject\": \"SDK payouts test txn\" }, \"items\": [ { \"recipient_type\": \"EMAIL\", \"receiver\": \"{$email}\", \"note\": \"Your 1$ payout\", \"sender_item_id\": \"Test_txn_12\", \"amount\": { \"currency\": \"CHF\", \"value\": \"{$actualAmount}\" } }] }", true);

不过这种方法需要转义大量双引号,代码看起来很乱,容易出错,不推荐。

方法3:字符串拼接(不推荐,风险高)

用PHP的字符串连接符.把变量和JSON字符串片段拼起来:

$body= json_decode( '{ "sender_batch_header": { "email_subject": "SDK payouts test txn" }, "items": [ { "recipient_type": "EMAIL", "receiver": "' . $email . '", "note": "Your 1$ payout", "sender_item_id": "Test_txn_12", "amount": { "currency": "CHF", "value": "' . $actualAmount . '" } }] }', true);

这种方法的问题在于,如果$email或$actualAmount里包含双引号、反斜杠等特殊字符,会直接破坏JSON的结构,导致解码失败,所以只有当你能确保变量内容绝对安全时才考虑使用。

内容的提问来源于stack exchange,提问作者nooby98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:17:35