You need to enable JavaScript to run this app. 如何在Lighthouse中正确解析存储在数据表内的JSON类型字段数据?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lighthouse中正确解析存储在数据表内的JSON类型字段数据?

问题解决方法

首先明确报错根源:你当前的GraphQL字段类型声明和实际返回的data字段值类型不匹配,之前的两个方案均存在类型对应错误:

  • 访问器将数据库存储的JSON字符串反序列化为PHP数组后,若GraphQL字段仍声明为String类型,会返回对象而非字符串触发类型错误
  • [String]为字符串数组类型,与你嵌套结构的JSON对象结构不匹配,因此无法生效

方案1:需返回结构化可查询的JSON数据(推荐)

适合需要客户端可单独查询data下description、event_id等子字段的场景:

  1. 先在GraphQL Schema中定义与data内部结构匹配的自定义类型:
type NotificationData {
  description: String!
  event_id: Int!
}
  1. 将notifications对应GraphQL类型中的data字段类型改为你定义的NotificationData:
type Notification {
  # 其他字段省略
  data: NotificationData!
}
  1. 保留你写的getDataAttribute访问器即可,PHP数组会自动映射为GraphQL对象返回。

如果你使用Lighthouse作为Laravel GraphQL框架,可省略访问器编写,直接在字段上加@json指令即可自动处理JSON字段的序列化/反序列化:

data: NotificationData! @json

方案2:仅需返回原始JSON字符串

适合不需要客户端拆解子字段,直接返回完整JSON字符串的场景:

  1. 删除你添加的getDataAttribute访问器,避免将JSON字符串转为数组
  2. 将GraphQL Schema中data字段类型设置为String即可

内容的提问来源于stack exchange,提问作者Eng Mustafa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:54:07