【问题标题】:Basic json_decode with PHP使用 PHP 的基本 json_decode
【发布时间】:2014-06-05 06:00:35
【问题描述】:

我正在尝试创建一个 Wordpress 插件,该插件将拉入 JSON 文件并(使用循环)为 JSON 文件中的每个对象创建一个元素。但是,这个特定的 JSON 文件以我从未见过的方式格式化,因此我很难弄清楚如何提取数据。文件的开头和结尾用数组括号标记。

这是JSON file

所以第一个对象看起来像这样:

[{
    "title": "Moderate earthquake - Fiji Region on June 5, 2014",
    "magnitude": "4.5",
    "location": "FIJI REGION",
    "depth": "334",
    "latitude": "-15.63",
    "longitude": "-176.92",
    "date_time": "2014-06-05T04:17:31+00:00",
    "link": "http://earthquake-report.com/2014/06/05/moderate-earthquake-fiji-region-on-june-5-2014/"
},

所以我有这个:

$json_feed_url = 'http://earthquake-report.com/feeds/recent-eq?json';
$args = array('timeout' => 120);
$json_feed = wp_remote_get($json_feed_url, $args);
$earthquake_data = json_decode($json_feed);

但是,我如何实际将其拉入并打印出来?我不能只使用 $earthquake_data->title,我需要一种能够使用索引从每个对象中提取的方法,因为它们没有名称。我需要从 0 索引开始并从那里开始吗?

echo $earthquake_data[0]; 
echo $earthquake_data[0]{$countervariable->title};

正如我所说,我想从本文档的最后 25 个对象中提取信息。任何帮助将不胜感激。

【问题讨论】:

  • foreach ($earthquake_data as $earthquake_data_single) { echo $earthquake_data_single->title; }.

标签: php wordpress json


【解决方案1】:
$json_feed_url = 'http://earthquake-report.com/feeds/recent-eq?json';
$args = array('timeout' => 120);
$json_feed = wp_remote_get($json_feed_url, $args);
$earthquake_data = json_decode($json_feed);

// $earthquake_data should be an array
foreach ($earthquake_data as $obj) {
  var_dump($obj);
  // example
  echo $obj->title;
}

【讨论】:

  • 嗯...当我使用你所写的 foreach 函数时,我得到这个:警告:为 foreach() 提供的参数无效。这通常是因为它实际上不是一个数组,对吧?看起来它实际上并没有被创建为一个数组。我创建了一个小测试函数来找出: if (!is_array($earthquake_data)) { echo '

    ITS NOT AN ARRAY!

    ';不用说,它打印出“这不是一个数组!”。有什么想法吗?
  • @thomasshellberg 它会返回 false,因为 json_decode() 返回 object。如果你想要array,你可以使用json_decode($json_feed, true)(注意第二个参数true
  • @Darren 错误。 JSON 数组仍然是数组(0、1、2、3.. 键)。然而,命名键将是对象属性。
  • @thomasshellberg 试试var_dump($earthquake_data) 并在 OP 中发布最小结果。如果数据解析不正确,可能是FALSE
  • @Darren 没问题 - 我的一天才刚刚开始,我还需要早上的咖啡。我知道你的感受:)
【解决方案2】:

我只是下载了文件,因为我不使用 wp。

诀窍是使用 'json_decode(data, true) 因为 PHP 会将所有对象转换为数组。只需几个“foreach”循环即可打印、从中选择等。

这里是一些经过测试的示例代码。

<?php
$dc = json_decode(file_get_contents('earthquake.json'), true);

foreach ($dc as $details) {
    echo '<strong>', $details['title'], '</strong><br />';
    foreach($details as $name => $value) {
        echo $name, ' => ', $value, '<br />';
    }
}

【讨论】:

  • 感谢您的帮助!这在将文件下载为 .json 并在本地使用后有效。我也刚刚将“earthquake.json”更改为提要 URL,它也能正常工作。如果我像以前那样使用 wp_remote_get 函数,它就不起作用。我猜这一直是问题所在。再次感谢!
  • @thomas,很高兴为您提供帮助
猜你喜欢
  • 1970-01-01
  • 2012-05-06
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多