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

如何将网站提取的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:06:05