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

PHP在HEREDOC格式JSON中嵌入变量失效如何解决

问题原因
  • JSON语法错误:键名containerNumber后的冒号被错误写在键名的双引号内部,正确键名应为"containerNumber",冒号放在双引号外分隔键值。
  • Heredoc语法使用错误:PHP的Heredoc结构内解析变量无需使用.字符串拼接符,写".$var."会被原样输出为字符串内容,不会解析变量。
  • 变量名不匹配:你预先定义的变量是$contnr,但Heredoc内调用的变量为$var,无法获取正确值。
  • 额外JSON语法错误:shipmentNumber的值aaaa1为字符串类型,未用双引号包裹,会导致JSON解析失败。
修复方案

方案1:修正Heredoc写法

直接在Heredoc内使用大括号包裹变量即可正常解析,示例代码如下:

<?php
$contnr = "001";

$dataB = <<<DATA
{
    "actualArrivalDateTime":"2021-09-07T10:00", 
    "containerNumber": "{$contnr}",
    "shipmentNumber": "aaaa1", 
    "containerSequence":3,  
    "placeOfArrival": {
        "pointSequence": 2
    }
} 
DATA;
?>

方案2(更推荐):使用json_encode生成JSON

手动拼接JSON极易出现语法错误,更稳妥的方式是先构造PHP数组,再通过json_encode函数转换为合法JSON字符串,完全避免引号、转义等问题:

<?php
$contnr = "001";
// 先构造对应结构的数组
$dataArr = [
    'actualArrivalDateTime' => '2021-09-07T10:00',
    'containerNumber' => $contnr,
    'shipmentNumber' => 'aaaa1',
    'containerSequence' => 3,
    'placeOfArrival' => [
        'pointSequence' => 2
    ]
];
// 转换为JSON字符串,JSON_PRETTY_PRINT用于格式化输出,不需要可以去掉
$dataB = json_encode($dataArr, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:03