Laravel 5.8查询数据库表数据并转换为JSON格式的问题咨询
问题根源
你打印的是Illuminate\Http\JsonResponse响应对象实例,该类的属性本身就是受保护(protected)的,所以直接打印对象会看到权限标记,不是数据库数据获取失败,是使用方式有误。
解决方案
根据你的使用场景选对应操作即可:
场景1:需要把目标JSON存到控制器变量
你不需要通过构造响应的方式转JSON,Laravel查询出来的结果集自带转JSON方法:
public function index() { // 查询单条数据推荐用first(),直接返回单条数据对象,无需处理集合 $circuit = DB::table('circuits') ->where('circuitId', 6) ->first(); // 直接转成纯JSON字符串存入变量,就是你需要的目标数据 $targetJson = $circuit->toJson(); // 测试打印直接输出这个变量即可 echo $targetJson; }
场景2:需要把数据作为接口返回给前端
直接返回JSON响应即可,前端收到的就是纯JSON内容,不会包含对象的受保护属性结构:
public function index() { $data = DB::table('circuits') ->where('circuitId', 6) ->get(); // 直接return响应,不要用print_r打印 return response()->json($data); }
场景3:需要先在控制器中操作数据字段再转JSON
如果需要先读取修改字段值,直接操作查询出来的对象即可:
public function index() { $circuit = DB::table('circuits') ->where('circuitId', 6) ->first(); // 直接读取字段值 $circuitName = $circuit->name; // 修改字段值 $circuit->alt = 10; // 操作完成后再转JSON $targetJson = json_encode($circuit); }
补充说明
response()->json()方法的作用是构造符合HTTP规范的JSON响应对象,仅用于接口返回场景,不要把它当做普通的JSON转换工具使用。你通过DB门面查询出来的集合、数据对象都已经封装了序列化方法,直接调用即可拿到纯JSON内容。
内容的提问来源于stack exchange,提问作者GkChris99
相关产品推荐
相关产品推荐

