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

Laravel移除JSON中data数组包裹的解决方案求助

嘿,我明白你想要做什么啦!你现在返回的JSON里data对应的是一个数组,你想去掉这个数组包裹——不过这里得先分两种情况来看,因为你用CategoryType::all()会返回多条记录,直接去掉数组包裹的话,JSON格式会有问题(毕竟JSON不允许顶级存在多个独立对象)。下面给你两种可行的解决方案:

方案1:把数组转换成键值对象(保留所有记录,去掉数组包裹)

如果你还是想返回所有分类,但不想用数组来包裹data的内容,可以用Laravel集合的keyBy()方法,把某个唯一字段(比如category_type_id)作为键,这样data就会变成一个关联对象而不是数组:

$get_all_category = CategoryType::all()->keyBy('category_type_id');
return response()->json(['success' => '1', 'data' => $get_all_category]);

对应的JSON输出会变成这样:

{
  "success": "1",
  "data": {
    "1": {
      "category_type_id": 1,
      "category_type": "Study",
      "category_icon": "http://192.168.1.132:8000/images/category/study.svg"
    },
    "2": {
      "category_type_id": 2,
      "category_type": "Sports",
      "category_icon": "http://192.168.1.132:8000/images/category/game.svg"
    },
    "3": {
      "category_type_id": 3,
      "category_type": "Other",
      "category_icon": "http://192.168.1.132:8000/images/category/other.svg"
    }
  }
}

方案2:返回单条记录(自然去掉数组包裹)

如果你其实是想要返回单个分类记录,那只需要把all()换成first()(取第一条)或者find($id)(根据ID取指定记录)就行,这样data的值就是单个对象,不会有数组包裹:

// 取第一条分类记录
$get_single_category = CategoryType::first();
return response()->json(['success' => '1', 'data' => $get_single_category]);

对应的JSON输出:

{
  "success": "1",
  "data": {
    "category_type_id": 1,
    "category_type": "Study",
    "category_icon": "http://192.168.1.132:8000/images/category/study.svg"
  }
}

额外:如果想把单条记录和success放在同一层级

要是你希望去掉data键,直接把单条分类的字段和success放在同一层级,可以这样做:

$category = CategoryType::first()->toArray();
return response()->json(array_merge(['success' => '1'], $category));

输出的JSON会是:

{
  "success": "1",
  "category_type_id": 1,
  "category_type": "Study",
  "category_icon": "http://192.168.1.132:8000/images/category/study.svg"
}

注意:这种方式只适合单条记录,多条记录的话会因为键名重复导致JSON结构错误,所以不推荐用在all()的场景哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:49:30