PHP中json_decode解析嵌套JSON字符串返回null,求助排查原因
问题排查与解决方案
嘿,这个问题我之前也踩过坑!你的代码里json_decode返回null的核心原因是**$locs字符串的格式不合法**,导致JSON解析直接失败。
问题根源
你给的$locs变量外面多套了一层双引号:
$locs='"[{"locid":"101","rows":[{"itemcode":"100005","qty":10,"desc":"Potato Chips Banana Chips","locs":"101"},{"itemcode":"100002","qty":20,"desc":"mango","locs":"101"}]}]"';
这就把原本应该是JSON数组的内容,变成了一个带转义引号的普通字符串。JSON解析器看到这种结构会直接判定为语法错误,自然返回null。
你可以加一行代码验证错误类型:
echo json_last_error_msg(); // 会输出 "Syntax error"
解决方案
只需要去掉$locs外层的双引号,让它成为标准的JSON数组字符串即可:
$locs='[{"locid":"101","rows":[{"itemcode":"100005","qty":10,"desc":"Potato Chips Banana Chips","locs":"101"},{"itemcode":"100002","qty":20,"desc":"mango","locs":"101"}]}]'; $locsArray = json_decode($locs, true); echo json_encode($locsArray); // 现在会正确输出原JSON结构:[{"locid":"101","rows":[{"itemcode":"100005","qty":10,"desc":"Potato Chips Banana Chips","locs":"101"},{"itemcode":"100002","qty":20,"desc":"mango","locs":"101"}]}]
额外调试技巧
以后再遇到json_decode返回null的情况,一定要用json_last_error()或json_last_error_msg()来获取具体错误信息,这能帮你快速定位问题——比如格式错误、编码不兼容、嵌套层级超限等,比瞎猜高效多了!
内容的提问来源于stack exchange,提问作者Anwar Hassan
相关产品推荐
相关产品推荐

