检索 json 数据。但是有这个错误 - "Trying to get property of non object"

Retrieve json data. but having this error - "Trying to get property of non object"

我还是laravel的新手。

我在 JSON 中有这个结果,我想在 'user_details' 中得到 'bio'。

{
    "id": 1,
    "name": "Jasper Mendiola",
    "username": "jasperduane77",
    "created_at": "2017-07-22 10:11:04",
    "updated_at": "2017-07-22 10:11:04",
    "userType": "Administrator",
    "user_details": {
        "user_id": 1,
        "profile_pic": null,
        "bio": "frustrated software blahblahblah"
    }

我在我看来试过这段代码

{{$user->user_details->bio}}

但是我有错误

> 正在尝试获取 属性 的非对象

这是我的 laravel 控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\UserDetail;
use DB;

class UsersController extends Controller
{

    public function __construct() {
        $this->middleware('auth');
    }

    public function index()
    {
        //
        $user_id = auth()->user()->id;

        $user = User::with('userDetails')->find($user_id);

        /**** When I enter this code, I get the error
        return view('profile.index')->with('user', $user); */

        return json_encode($user);
    }
}

你具体是怎么做到的?非常感谢您的帮助。

你应该这样使用:

<?php
$jsonData = '{
    "id": 1,
    "name": "Jasper Mendiola",
    "username": "jasperduane77",
    "created_at": "2017-07-22 10:11:04",
    "updated_at": "2017-07-22 10:11:04",
    "userType": "Administrator",
    "user_details": {
        "user_id": 1,
        "profile_pic": null,
        "bio": "frustrated software blahblahblah"
    }
}';
$josnObj = json_decode($jsonData); 
echo $josnObj->user_details->bio;//frustrated software blahblahblah
?>

如果要发送JSON回复

在您的控制器中,只需将 return json_encode($user); 替换为 return $user;

它将自动发送 $user 作为 json 响应。如果您将使用 return json_encode($user); 它只会以字符串格式发送 json 响应,您需要转换此字符串在您的视图中使用 json_decode() 进入数组或对象。

如果要发送数据查看

然后在你的控制器中:

return view('profile.index', ['user' => $user]);

那么在你看来:

{{$user->user_details->bio}}

您要返回一个 json 字符串,这样对于 API 请求来说会很酷。 laravel 这样做的方式是使用 view() 所以我们可以渲染一个 blade 模板。在这种情况下,您应该这样做:

控制器代码:

return view('users.index', [ 'user' => $user ]);

在这里你需要一个 blade 文件在 views/users/index.blade.php 里面你可以调用 {{$user->user_details->bio }} 因为您仍在使用 User 模型而不是 json "string".