如何在Laravel Excel中导入JSON列



我正在尝试导入一个文件,其中包含json数据在一些列,这些数据需要导入到PostgreSQL的JSONB字段。

Json数据示例:

{"phone":"6365615298", "website":"http://www.happychinafood.com"}

但是,当导入文件时,导入的数据在数据库中显示如下:

"{""phone"":""6365615298"", ""website"":""http://www.happychinafood.com""}"

我需要导入的数据完全为如何提供的例子。

有办法做到这一点吗?

我使用的包是maatwebsite/excel

找到解决方案后,基本上需要考虑以下几点:

包含JSON数据的字段需要解码模型应该将这些字段强制转换为数组Laravel模型将数据转换为数组以插入,但如果DB中的字段是JSON字段,模型将自动序列化值

参考:https://laravel.com/docs/8.x/eloquent-mutators array-and-json-casting

我的代码示例:

public function model(array $row)
{
$this->affectedRows++;
$parameters = [];
$i = 0;
foreach ($this->columns as $column => $value) {
if ($value) {
$parameters[$column] = $value;
} elseif ($this->isJson($row[$i])) {
$parameters[$column] = json_decode($row[$i], true, 64, JSON_THROW_ON_ERROR);
} else {
$parameters[$column] = $row[$i];
}
$i++;
}
return new $this->modelClass($parameters);
}
private function isJson($string): bool
{
json_decode($string);
return json_last_error() === JSON_ERROR_NONE;
}

最新更新