【问题标题】:Php how to get data from dictionary object [duplicate]PHP如何从字典对象中获取数据[重复]
【发布时间】:2026-01-19 11:00:02
【问题描述】:

我从 API 收到这样的响应

[{"destination_url":"https://www.smh.com.au/business/the-economy/australia-s-workplaces-are-transforming-search-where-the-jobs-will-be-in-2024-20180418-p4zaal.html?promote_channel=edmail&mbnr=MjAyNTgyMjU&eid=email:nnn-13omn654-ret_newsl-membereng:nnn-04%2F11%2F2013-news_am-dom-news-nnn-age-u&campaign_code=13INO010&et_bid=29124074&list_name=40_smh_newsalert&instance=2018-04-18--20-11--UTC",
  "doc_id":"17014",
  "main_url":"http://click.email.fairfaxmedia.com.au/?qs=b3370d8980e989c9e39909e0291c60d501f8a164477f9e049f07626b2a9c7e79da7d38ad705d7713e024559ecf2f217f79f8c08f728ab7fe",
  "redirect_urls":"http://click.email.fairfaxmedia.com.au/?qs=b3370d8980e989c9e39909e0291c60d501f8a164477f9e049f07626b2a9c7e79da7d38ad705d7713e024559ecf2f217f79f8c08f728ab7fe||http://www.smh.com.au/business/the-economy/australia-s-workplaces-are-transforming-search-where-the-jobs-will-be-in-2024-20180418-p4zaal.html?promote_channel=edmail&mbnr=MjAyNTgyMjU&eid=email:nnn-13omn654-ret_newsl-membereng:nnn-04%2F11%2F2013-news_am-dom-news-nnn-age-u&campaign_code=13INO010&et_bid=29124074&list_name=40_smh_newsalert&instance=2018-04-18--20-11--UTC"
}]"

现在我必须从这里访问doc_id。这是我尝试过的:

$landerProperties = $request->data;
$landerProperties = json_decode(json_encode($landerProperties,true),true);
$id = (int)$landerProperties[0]['doc_id'];
foreach ($landerProperties as $key => &$value) {
   unset($value['doc_id']);
}

但它给了我一个例外:Illegal string offset 'doc_id'。请告诉我如何从这里访问数据。

【问题讨论】:

  • 包括你最好的编码尝试——这是对你的期望的一部分。目前,您似乎没有进行任何研究,也没有进行任何尝试。 * 不是免费的编码服务。这很可能会被一个非常笼统的“如何解析 json”重复。
  • 我正在尝试 - 我们没有看到您在问题中的任何尝试。
  • 信息不足
  • @mickmackusa 请检查,我已在此处添加代码。如果有人不粘贴代码示例,并不意味着他没有尝试任何东西。
  • 这里有很多人辱骂志愿者,我们不能假设你是一个好或坏的发帖者——最好证明你的问题是“有价值的”。

标签: php arrays json dictionary


【解决方案1】:

如果要访问第一个,请使用:(注意 json 字符串周围的单引号)

代码:(Demo)

$json = '[{"destination_url":"https://www.smh.com.au/business/the-economy/australia-s-workplaces-are-transforming-search-where-the-jobs-will-be-in-2024-20180418-p4zaal.html?promote_channel=edmail&mbnr=MjAyNTgyMjU&eid=email:nnn-13omn654-ret_newsl-membereng:nnn-04%2F11%2F2013-news_am-dom-news-nnn-age-u&campaign_code=13INO010&et_bid=29124074&list_name=40_smh_newsalert&instance=2018-04-18--20-11--UTC","doc_id":"17014","main_url":"http://click.email.fairfaxmedia.com.au/?qs=b3370d8980e989c9e39909e0291c60d501f8a164477f9e049f07626b2a9c7e79da7d38ad705d7713e024559ecf2f217f79f8c08f728ab7fe","redirect_urls":"http://click.email.fairfaxmedia.com.au/?qs=b3370d8980e989c9e39909e0291c60d501f8a164477f9e049f07626b2a9c7e79da7d38ad705d7713e024559ecf2f217f79f8c08f728ab7fe||http://www.smh.com.au/business/the-economy/australia-s-workplaces-are-transforming-search-where-the-jobs-will-be-in-2024-20180418-p4zaal.html?promote_channel=edmail&mbnr=MjAyNTgyMjU&eid=email:nnn-13omn654-ret_newsl-membereng:nnn-04%2F11%2F2013-news_am-dom-news-nnn-age-u&campaign_code=13INO010&et_bid=29124074&list_name=40_smh_newsalert&instance=2018-04-18--20-11--UTC"}]';

echo (int)json_decode($json, true)[0]['doc_id'];

输出:

17014

【讨论】:

  • 谢谢,json 无效问题