如何将网站提取的JSON-LD转为PHP数组?解决非法字符串偏移报错
解决JSON-LD转PHP数组时的"Illegal string offset 'name'"报错
这个报错本质是你把字符串当成数组来访问了——也就是说你的JSON并没有被正确解析成PHP数组,反而还是个字符串,所以当你用$array['name']去取值时就触发了警告。下面一步步帮你搞定:
第一步:先确保你的JSON格式完整正确
你提供的JSON末尾有...,这明显是不完整的,JSON要求必须是完全闭合的结构(所有大括号、引号都要配对)。比如得把JSON补成完整的格式:
{ "@context": "http://schema.org", "@type": "LodgingBusiness", "name":"Breakerwood Suites", "amenityFeature":"A nice place to sleep", "audience":{ "@type":"Audience", "audienceType":"All" }, "checkinTime":"16:00", "checkoutTime":"10:00" }
如果JSON本身有语法错误(比如缺闭合括号、引号没转义),json_decode会返回null或者还是字符串,直接导致后续访问出错。
第二步:正确使用json_decode函数
默认情况下json_decode会返回对象,如果你想转成关联数组,必须加上第二个参数true。而且一定要先检查解析是否成功:
// 确保JSON是完整正确的 $json = '{ "@context": "http://schema.org", "@type": "LodgingBusiness", "name":"Breakerwood Suites", "amenityFeature":"A nice place to sleep", "audience":{ "@type":"Audience", "audienceType":"All" }, "checkinTime":"16:00", "checkoutTime":"10:00" }'; // 转成关联数组,第二个参数必须为true $lodgingArray = json_decode($json, true); // 先检查解析是否出错 if (json_last_error() !== JSON_ERROR_NONE) { die('JSON解析失败: ' . json_last_error_msg()); } // 现在就能正常访问name字段了 echo $lodgingArray['name']; // 输出 Breakerwood Suites
额外排查点
- 如果你的JSON里包含特殊字符(比如双引号、反斜杠),要确保已经正确转义,否则解析会失败。
- 要是你没加第二个参数
true,那返回的是对象,得用$lodgingObject->name来访问,而不是数组的方式。
内容的提问来源于stack exchange,提问作者Anna Pascal
相关产品推荐
相关产品推荐

