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

