Laravel 将 JSON 转换为数组?

Posted

技术标签:

【中文标题】Laravel 将 JSON 转换为数组?【英文标题】:Laravel casting JSON to array? 【发布时间】:2016-04-01 13:33:09 【问题描述】:

我正在尝试将 JSON 字段转换为数组。比如模型是这样的:

protected $casts = [
    'content' => 'array'
]; 

在插入内容时,我这样做:

'content'=> json_encode([
                'description' => $faker->paragraph(3),
                'about' => $faker->paragraph(2),
                'info' => $faker->paragraph(2),
                'updated' => $faker->dateTimeBetween('-1 years', 'now')
]),

但在获取数据时,它会打印一个字符串,仅此而已。

这部分的迁移如下所示:

$campaign->json('content');

输出示例:

"content": "\"description\":\"Ut quas quo odio illo. Voluptates quia fuga itaque sint. Velit sapiente fugit ea ut ducimus sint tempora eligendi. Ea et molestiae consequuntur quibusdam soluta voluptatem.\",\"about\":\"Aut voluptates et iste ut perspiciatis. Esse sunt ullam inventore sit doloremque et quisquam.\",\"info\":\"Corrupti et facere exercitationem consequatur aspernatur quo saepe. Omnis et tempore enim ut. Quia magnam quia enim et eos enim.\",\"updated\":\"date\":\"2015-11-22 08:25:13.000000\",\"timezone_type\":3,\"timezone\":\"UTC\"",

有什么想法吗?

【问题讨论】:

RTM:json_encode 和 json_decode。 另外,当您设置'key' => 'value' 时,您已经有一个数组。你想达到什么目的? xD 我正在从模型中转换元素,因此当控制器返回 JSON 时,它看起来确实像 JSON 对象而不是字符串。这种方式很容易操作和使用:) 【参考方案1】:

如果你想大开眼界……

// automatically handles json_encode, json_decode to php object
protected $casts = [
    'db_json_column' => 'object'
];

$model->db_json_column = $array; // persisted as json
$object = $model->db_json_column; // retrieved as object

或者,

// automatically handles json_encode, json_decode to php array
protected $casts = [
    'db_json_column' => 'array'
];

$model->db_json_column = $array; // persisted as json
$array = $model->db_json_column; // retrieved as array

【讨论】:

【参考方案2】:

只需使用json_decodeoption array true

json_decode($casts['content'], true));

【讨论】:

当通过关系和$data->content; 获取模型的那部分数据时,您将如何实现这一点? 你可以试试$data->toArray()【参考方案3】:

当您定义array 转换时,您不需要执行任何json_encodejson_decode。当你想插入时,你需要做的很简单:

'content'=> [
    'description' => $faker->paragraph(3),
    'about' => $faker->paragraph(2),
    'info' => $faker->paragraph(2),
    'updated' => $faker->dateTimeBetween('-1 years', 'now')
],

Laravel 将完成剩下的工作

而当你想获取content字段数据时,你只需简单的使用:

$campaign->content;

你会在这里有数组,所以如果你想显示描述,你只需要做:

echo $campaign->content['description'];

【讨论】:

谢谢。。我完全迷路了,因为我之前在 laravel 4 中放置了一个数组,但它在播种时抛出错误,但看起来我需要更好地阅读错误...谢谢队友:)

以上是关于Laravel 将 JSON 转换为数组?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,将 JSON 数组转换为数组,只从数组中获取一个对象

在 Laravel 中将二维数组转换为 json 对象

将 JSON 数据从 API 转换为数组并在 Laravel 和 Guzzle HTTP Client 中分别显示?

laravel怎么把对象转换为数组

将 Laravel 集合/数组转换为 Javascript 数组

将对象对象转换为对象数组(PHP,Laravel)