json - Laravel Blade 的 toArray() 和 json_decode() 之间的区别
问题描述
当简单地返回 $users 时,我使用 toArray() 和 json_decode() 得到完全相同的结果。但是在我的视图中循环 $users 时,我使用 toArray() 方法得到一个错误('尝试获取非对象的属性'xxx')。不使用 json_decode()。知道为什么吗?我在 Laravel 6 上。
$client = HttpClient::create();
$response = $client->request('GET', 'https://jsonplaceholder.typicode.com/users');
$users = json_decode($response->getContent());
// $users = $response->toArray();
return $users;
解决方案
toArray() 方法返回纯数组。虽然 json_decode() 键始终是字符串,而值可以是字符串、数字、真或假、null 甚至是对象或数组。
因此,您尝试访问由 json_decode 返回的对象,如果您在编码时有对象,则该对象有效。但是,当尝试从数组的角度访问对象时,它不会工作,因为数组是普通数组。
Json_decode()的解释
PHP 的 json_decode 函数接受一个 JSON 字符串并将其转换为 PHP 变量。通常,JSON 数据将表示一个 JavaScript 数组或对象字面量,json_decode 会将其转换为 PHP 数组或对象。
解释 PHP 数组超出了这个范围。然而:
PHP 中的数组实际上是一个有序映射。映射是将值与键相关联的类型。这种类型针对几种不同的用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。由于数组值可以是其他数组,因此树和多维数组也是可能的。
最后,您正在尝试访问 json_decode 返回的对象 - 工作正常。但是数组不会保存对象,因此它会抛出试图获取非对象的属性。
推荐阅读
- javascript - 如何在完整日历中的所有单元格日显示文本
- scala - 如何过滤类型为(String,Seq(String,String,...))的元组中的'@'字符?
- python-3.x - 如何在 python 中为 request.get() 传递 Jwt 令牌
- python-3.x - 给定网格点查找对应的矩形坐标
- flutter - 在另一个选项卡视图内的选项卡视图内的小部件树中检测到重复的 GlobalKey
- spring-webflux - 如何在 Spring Boot 中配置嵌入式 Reactive Netty 以便能够使用“|”处理获取请求 在查询中
- jsf - 使用 ui:params 初始化 JSF 控制器的正确方法
- eclipse - 如何在eclipse中的码头运行多个webapps
- c++ - 动态调用 Openh264 函数导致我的应用程序崩溃
- python - 从单个 gpu 转移到多个 gpu。抛出错误 TypeError: '<' not supported between 'list' 和 'int' 实例