Laravel/Vue - 传递数据:Json 嵌套值作为字符串

Posted

技术标签:

【中文标题】Laravel/Vue - 传递数据:Json 嵌套值作为字符串【英文标题】:Laravel/Vue - Passing data : Json Nested values as string 【发布时间】:2019-11-17 21:31:08 【问题描述】:

我正在尝试将一个 JSON 对象从我的 Laravel 后端传递到我的 Vue 前端,但是其中一个嵌套属性正在以字符串而不是对象的形式返回。有问题的对象是user.options,如下所示。

user.options 对象格式正确,但是当我发送响应时,它被视为字符串。我可以在前端将字符串转换为 JSON,但这并不理想。

public function update(Request $request)

    $user = $this->user;
    $user->options = json_encode([
        'cart' => $request->only('product_id', 'code', 'product_slug', 'pic_url', 'request')
    ]);
    $user->save();

    return response()->json($user);

【问题讨论】:

【参考方案1】:

无需手动序列化属性的 JSON。相反,您可以使用 Eloquent 的 $casts 属性来定义您的 options 应该被视为对象:

class User

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'options' => 'object',
    ];

然后您可以将数组和对象分配给该属性。 Eloquent 会将其作为 JSON 存储在后台。当您检索该属性时,Eloquent 会再次将其转换回一个对象:

public function update(Request $request) 
    $user = $this->user;
    $user->options = [
        'cart' =>  $request->only('product_id', 'code', 'product_slug', 'pic_url', 'request')
    ];
    $user->save();

    return response()->json($user);

【讨论】:

以上是关于Laravel/Vue - 传递数据:Json 嵌套值作为字符串的主要内容,如果未能解决你的问题,请参考以下文章

通过 Laravel Vue 表单中的对象传递数据

如何将数组从 Laravel Blade 传递到 Laravel 6/Vue 2.6 中的 Vue 组件。*

在子级循环中获取父级 json 数据。 (Laravel Vue js)

如何将值从 Laravel 刀片传递给 vue 组件?

Laravel + Vue - 将多维 PHP 数组传递给 vue 组件

Laravel 将 Auth 传递给 vue SPA