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

Laravel解析JSON报错:Undefined array key 'gm_bk_id' 求修正代码

问题排查与代码修正

问题原因

报错Undefined array key "gm_bk_id"的核心原因是代码遍历层级错误:原代码直接遍历data['locator']['groups']数组,但gm_bk_id、gm_title等游戏相关字段实际存储在每个group对象的games子数组中,导致尝试从group对象读取不存在的键值。

错误信息

Undefined array key "gm_bk_id" {"userId":1,"exception":"[object] (ErrorException(code: 0): Undefined array key "gm_bk_id"

原代码

public function parse()
{
    $data = json_decode(file_get_contents(public_path() . "/telnet.json"), true);
    $slots = $data['locator']['groups'];

    foreach($slots as $slot) {
        Slot::create([
            'game_id'       => $slot['gm_bk_id'],
            'title'         => $slot['gm_title'],
            'alias'         => $slot['gm_url'],
            'provider'      => $slot['gr_title'],
            'provider_type' => 'TELNET',
            'image'         => $slot['icons']
        ]);
    }

    return redirect()->back()->withSuccess('The list updated');
}

待解析的JSON结构

{
   "success":true,
   "api":"ls-thy-by-yhr-id-get",
   "locator":{
      "ico_baseurl":"\/sdfsgre\/icons\/",
      "groups":[
         {
            "games":[
               {
                  "gm_is_board":false,
                  "gm_m_w":1280,
                  "gm_ln":20,
                  "gm_is_copy":true,
                  "gm_url":"Oeprjkg",
                  "gm_is_retro":false,
                  "gm_bk_id":1017,
                  "gm_d_w":1280,
                  "icons":[
                     {
                        "ic_h":221,
                        "ic_w":300,
                        "ic_name":"oeprjkg_300_221.jpg"
                     },
                     {
                        "ic_h":135,
                        "ic_w":170,
                        "ic_name":"oeprjkg_170_135.jpg"
                     },
                     {
                        "ic_h":101,
                        "ic_w":150,
                        "ic_name":"oeprjkg_150_101.jpg"
                     },
                     {
                        "ic_h":220,
                        "ic_w":220,
                        "ic_name":"oeprjkg_220_220.jpg"
                     }
                  ],
                  "gm_title":"Oeprjkg",
                  "gm_m_h":720,
                  "gm_is_fs":true,
                  "gm_is_mobile":true,
                  "gm_is_pc":true,
                  "gm_new":false,
                  "gm_d_h":720
               },
               {
                  "gm_is_board":false,
                  "gm_m_w":1280,
                  "gm_ln":10,
                  "gm_is_copy":true,
                  "gm_url":"Tdfhhdf",
                  "gm_is_retro":false,
                  "gm_bk_id":1008,
                  "gm_d_w":1280,
                  "icons":[
                     {
                        "ic_h":221,
                        "ic_w":300,
                        "ic_name":"Tdfhhdf_300_221.jpg"
                     },
                     {
                        "ic_h":135,
                        "ic_w":170,
                        "ic_name":"Tdfhhdf_170_135.jpg"
                     },
                     {
                        "ic_h":101,
                        "ic_w":150,
                        "ic_name":"Tdfhhdf_150_101.jpg"
                     },
                     {
                        "ic_h":220,
                        "ic_w":220,
                        "ic_name":"Tdfhhdf_220_220.jpg"
                     }
                  ],
                  "gm_title":"Tdfhhdf",
                  "gm_m_h":720,
                  "gm_is_fs":true,
                  "gm_is_mobile":true,
                  "gm_is_pc":true,
                  "gm_new":false,
                  "gm_d_h":720
               }
            ],
            "gr_title":"Tjtyuk",
            "gr_id":12
         },
         {
            "games":[
               {
                  "gm_is_board":false,
                  "gm_m_w":1280,
                  "gm_ln":4096,
                  "gm_is_copy":true,
                  "gm_url":"Idofjio",
                  "gm_is_retro":false,
                  "gm_bk_id":2001,
                  "gm_d_w":1280,
                  "icons":[
                     {
                        "ic_h":221,
                        "ic_w":300,
                        "ic_name":"Idofjio_300_221.jpg"
                     },
                     {
                        "ic_h":135,
                        "ic_w":170,
                        "ic_name":"Idofjio_170_135.jpg"
                     },
                     {
                        "ic_h":101,
                        "ic_w":150,
                        "ic_name":"Idofjio_150_101.jpg"
                     },
                     {
                        "ic_h":220,
                        "ic_w":220,
                        "ic_name":"Idofjio_220_220.jpg"
                     }
                  ],
                  "gm_title":"Idofjio",
                  "gm_m_h":720,
                  "gm_is_fs":true,
                  "gm_is_mobile":true,
                  "gm_is_pc":true,
                  "gm_new":false,
                  "gm_d_h":720
               },
               {
                  "gm_is_board":false,
                  "gm_m_w":1280,
                  "gm_ln":243,
                  "gm_is_copy":true,
                  "gm_url":"Egdfhfgh",
                  "gm_is_retro":false,
                  "gm_bk_id":2000,
                  "gm_d_w":1280,
                  "icons":[
                     {
                        "ic_h":221,
                        "ic_w":300,
                        "ic_name":"Egdfhfgh_300_221.jpg"
                     },
                     {
                        "ic_h":135,
                        "ic_w":170,
                        "ic_name":"Egdfhfgh_170_135.jpg"
                     },
                     {
                        "ic_h":101,
                        "ic_w":150,
                        "ic_name":"Egdfhfgh_150_101.jpg"
                     },
                     {
                        "ic_h":220,
                        "ic_w":220,
                        "ic_name":"Egdfhfgh_220_220.jpg"
                     }
                  ],
                  "gm_title":"Egdfhfgh",
                  "gm_m_h":720,
                  "gm_is_fs":true,
                  "gm_is_mobile":true,
                  "gm_is_pc":true,
                  "gm_new":false,
                  "gm_d_h":720
               }
            ],
            "gr_title":"Egdfhfgh",
            "gr_id":19
         }
      ]
   }
}

修正后的代码

public function parse()
{
    $data = json_decode(file_get_contents(public_path() . "/telnet.json"), true);
    $groups = $data['locator']['groups'];

    foreach($groups as $group) {
        foreach($group['games'] as $game) {
            Slot::create([
                'game_id'       => $game['gm_bk_id'],
                'title'         => $game['gm_title'],
                'alias'         => $game['gm_url'],
                'provider'      => $group['gr_title'],
                'provider_type' => 'TELNET',
                'image'         => $game['icons']
            ]);
        }
    }

    return redirect()->back()->withSuccess('The list updated');
}

修正说明

  1. 调整遍历层级:先遍历groups数组,再嵌套遍历每个group下的games子数组,确保访问到正确的游戏数据对象
  2. 字段来源修正:游戏相关字段(gm_bk_id、gm_title等)从$game对象读取,提供商名称gr_title从所属的$group对象读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:44:51