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

渲染Schema Org结构化数据时如何移除数组自动生成的数字键

问题原因

你遇到的数字键问题本质是PHP在执行JSON序列化时,将非连续索引的数组识别为关联数组,自动转换为JSON对象格式,而schema.org的FAQPage规范要求mainEntity字段必须为数组格式。

解决步骤

1. 重置数组索引(核心修复)

修改addFaq方法,使用array_values重置self::$items的索引,保证数组为从0开始的连续索引结构,JSON序列化时就会自动转为数组格式:

public static function addFaq()
{
    self::addCustom([
        "@context" => "http://schema.org",
        "@type" => "FAQPage",
        "mainEntity" => array_values(self::$items)
    ]);
}

2. 检查静态变量初始化

确认self::$items在类中初始化时为标准空索引数组:

// 类内静态变量声明示例
public static $items = [];

3. 确认JSON序列化参数

检查addCustom方法中调用json_encode的逻辑,不要添加JSON_FORCE_OBJECT参数,该参数会强制所有数组转为对象,导致结构异常。

修复后输出示例
{
    "@context": "http://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "Question 1",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Lorem ipsum dolor sit amet."
            }
        },
        {
            "@type": "Question",
            "name": "Question 2",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Lorem ipsum dolor sit amet."
            }
        }
    ]
}

内容的提问来源于stack exchange,提问作者Filip Podhorský

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:06:00