composer报错json语法错误时,可用php -r命令或check-json.php脚本快速定位错误行号与列位置,因json标准不支持注释,需检查逗号、引号、括号等符号是否匹配。
Composer 报错 json 文件语法错误,基本就是 composer.json 里某个逗号、引号、括号没写对,或者用了注释——JSON 标准根本不支持注释。
用 json_decode() 快速定位错误行
PHP 自带的 json_decode() 能直接告诉你错在哪一行哪一列,比反复看文件高效得多:
php -r "json_decode(file_get_contents('composer.json')) or die('JSON error: '.json_last_error_msg().' at line '.(substr_count(file_get_contents('composer.json'), "
") + 1)."
");"
更实用的是加个行号标记版本(保存为 check-json.php):
<?php
$content = file_get_contents('composer.json');
$result = json_decode($content, true);
if ($result === null) {
$error = json_last_error();
$line = 1;
$pos = json_last_error_msg();
$lines = explode("
", $content);
foreach ($lines as $i => $l) {
if (strpos($content, $l) !== false && strlen(substr($content, 0, strpos($content, $l))) <= json_last_error_msg()) {
$line = $i + 1;
break;
}
}
echo "JSON parse error on line $line: " . json_last_error_msg() . "
";
exit(1);
}
运行 php check-json.php 就能精准定位。常见报错如 syntax error, unexpected '}' 或 Unexpected token 都对应具体位置。
Composer 自带校验命令:composer validate
这个命令不只是检查 JSON 语法,还会验证字段合法性(比如 require 是否是对象、autoload 是否结构合规),但默认不显示详细位置: