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
相关产品推荐
相关产品推荐

