【问题标题】:PHP - Accessing data inside JSON string with objects [duplicate]PHP - 使用对象访问JSON字符串中的数据[重复]
【发布时间】:2020-11-29 22:59:18
【问题描述】:

背景:

我有一个项目将通过 API 访问的数据移动到另一个应用程序。代码在 PHP 中,目前我无法访问返回的 JSON 字符串中的“url”。

$json = '{"data": [{"vehicle": {"id": "2122233","name": "MY REG"},"files": [{"vin": "WMARR44444W146311","createdAtTime": "2020-08-05T00:25:47.388Z","url": "https://tachograph-files43679/2020/8/5/WMA24XZZ7BW146311/1596587147388-b6785431-c2e1-41ff-b7af-9bb078654882.ddd?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-XXXXXXXXXXXXX","id": "XXXXXXXXX"}]}],"pagination": {"endCursor": "XXXXX-be93-44b2-91a2-095af9f1c301","hasNextPage": false}}';

这是 JSON 字符串(已删除敏感数据)。得到结果后,我必须在另一个调用中使用 URL 来检索文件数据。

如果我使用 json_decode($json) 会出错。

如果我使用 jsondecode($json,true) 则 URL 不可访问。

我知道问题出在 JSON 字符串中的一个对象,但我不知道如何访问它。

最终我将在 JSON 中引用多个车辆和多个文件。

所以,我想遍历 JSON,然后再次调用以下载数据文件。

任何帮助表示赞赏。

谢谢 马尔科姆

【问题讨论】:

  • json_decode($json) 没有报错,它生成一个对象
  • echo $obj->data[0]->files[0]->url;

标签: php json object parsing


【解决方案1】:

您提供的 JSON 很好,当 PHP 尝试对其进行解码时,不会生成错误。您可以像这样访问 URL:

$json = '{"data": [{"vehicle": {"id": "2122233","name": "MY REG"},"files": [{"vin": "WMARR44444W146311","createdAtTime": "2020-08-05T00:25:47.388Z","url": "https://tachograph-files43679/2020/8/5/WMA24XZZ7BW146311/1596587147388-b6785431-c2e1-41ff-b7af-9bb078654882.ddd?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-XXXXXXXXXXXXX","id": "XXXXXXXXX"}]}],"pagination": {"endCursor": "XXXXX-be93-44b2-91a2-095af9f1c301","hasNextPage": false}}';
$obj = json_decode($json);
echo $obj->data[0]->files[0]->url;

工作演示:http://sandbox.onlinephpfunctions.com/code/9957b8173821d91a2616981788d7d1ebde959df7

您还声称使用 json_encode($data, true); 会使 URL 无法访问。它没有。但由于该命令生成的是关联数组而不是对象,因此您必须使用不同的语法来访问它:

$obj = json_decode($json, true);
echo $obj["data"][0]["files"][0]["url"];

工作演示:http://sandbox.onlinephpfunctions.com/code/3d88cde32b31cffe065b7a56c2bc57f2a46fbbe8

【讨论】:

  • 非常感谢。我确实在处理多维数组。
  • @Malcolmf 没问题。附言从概念上讲,我认为您最好将此数据视为列表和项目的层次结构(有点像树)而不是多维数组。
  • 感谢您的建议,并为我的无知感到抱歉...如果有多个文件可以访问,例如$obj["data"][0]["files"][1]["url"] 和 $obj["data"][0]["files"][2]["url"] 等,我将如何遍历 JSON?
  • 好吧,一旦你解码了它,它就不再是 JSON,而是一个数组。因此,您可以像 PHP 中的任何其他数组一样遍历它 - 例如在数组项上使用forforeach 循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2018-10-26
  • 2013-11-14
相关资源
最近更新 更多