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
相关产品推荐
相关产品推荐

