无法 json_encode() 数组或 Laravel 集合:“不支持类型”

Posted

技术标签:

【中文标题】无法 json_encode() 数组或 Laravel 集合:“不支持类型”【英文标题】:Can't json_encode() an array or Laravel collection: "Type is not supported" 【发布时间】:2018-07-07 07:24:21 【问题描述】:

我不知道我做错了什么,因为它适用于应用程序中的所有其他模型。我多次刷新并重新植入数据库。这些模型扩展了相同的抽象方法。

这是控制器中的代码:

$substrates = $this->substrates->all()->toArray();
$temp = json_encode($substrates);
dd($temp, json_last_error(), json_last_error_msg(), $substrates);

这是 dd() 输出:

false
8
"Type is not supported"

array:119 [▼

  0 => array:21 [▼

    "id" => 1
    "name" => "Wood Free"
    "machine_id" => 2
    "classification" => "Cover"
    "origins" => "Coming Soon"
    "duplex" => true
    "color" => "Translucents"
    "texture" => "Leather"
    "finish" => "Felt"
    "product_type" => "Sheet"
    "caliper" => "0.06"
    "m_weight" => 70
    "width" => "46.40"
    "height" => "32.00"
    "pic" => stream resource @17 ▶
    "price" => "0.30"
    "created_by" => 38
    "updated_by" => 16
    "deleted_at" => null
    "created_at" => "2018-01-27 08:00:11"
    "updated_at" => "2018-01-27 08:00:11"
  ]

  1 => array:21 [▶] ....

当我使用 JSON_PARTIAL_OUTPUT_ON_ERROR 时,我得到一个 json 字符串。

【问题讨论】:

【参考方案1】:

错误的原因是,您在无法序列化为 JSON 的序列化对象的 pic 字段中存储了一个 流资源

您可以通过在模型中设置 $hidden 属性来告诉 Eloquent 模型在将选定的属性转换为数组时跳过它们:

class Substrate extends Model 
  protected $hidden = ['pic'];

【讨论】:

@MuntherJaber 你能把问题标记为已回答吗?

以上是关于无法 json_encode() 数组或 Laravel 集合:“不支持类型”的主要内容,如果未能解决你的问题,请参考以下文章

PHP json_encode 到 C# 对象无法转换

将 PHP json_encode 数组发送到 jQuery

无法替换 php 中的回车符和换行符

多维数组json_encode之后产生对象而不是数组问题

多维数组json_encode之后产生对象而不是数组问题

多维数组json_encode之后产生对象而不是数组问题