【问题标题】:Accessing object in json from php从php访问json中的对象
【发布时间】:2019-01-28 17:12:30
【问题描述】:

我已经有一段时间没有这样做了,我显然错过了一些关键部分。我希望你们都可以让我直截了当。

我有一个我正在解码的 json 文件,我希望访问特定日期的数据是一项简单的任务。这是我到目前为止所做的。

$solardata = file_get_contents('solar.json');
$solarjson = json_decode("$solardata");
$production = $solarjson->{'2019-01-24 11:00:00'};
echo "$production";

$production 变量始终为空。 作为参考,solar.json 文件的开头是这样的:

{"powerDetails":{"timeUnit":"QUARTER_OF_AN_HOUR","unit":"W","meters":[{"type":"Production","values":[{"date":"2019-01-24 11:00:00","value":273.5632},{"date":"2019-01-24 11:15:00","value":405.8625},{"date":"2019-01-24 11:30:00","value":558.6771},

var_dump($solarjson) 的开头是这样的:

object(stdClass)#321 (1) { ["powerDetails"]=> object(stdClass)#3 (3) { ["timeUnit"]=> string(18) "QUARTER_OF_AN_HOUR" ["unit"]=> string(1) "W" ["meters"]=> array(1) { [0]=> object(stdClass)#4 (2) { ["type"]=> string(10) "Production" ["values"]=> array(316) { [0]=> object(stdClass)#5 (2) { ["date"]=> string(19) "2019-01-24 11:00:00" ["value"]=> float(273.5632) } [1]=> object(stdClass)#6 (2) { ["date"]=> string(19) "2019-01-24 11:15:00" ["value"]=> float(405.8625) } [2]=> object(stdClass)#7 (2) { ["date"]=> string(19) "2019-01-24 11:30:00" ["value"]=> float(558.6771) }

服务器错误日志显示:

Undefined property: stdClass::$2019-01-24 11:00:00 in /home/......

我尝试访问的对象是否在我仍需要循环访问的数组中?我梦想着我可以通过一个简单的对象请求来避免所有这些,因为我正在寻找特定的数据,但正如我所说,我很生疏。 感谢您的帮助。

【问题讨论】:

  • 查看您的数据并思考一下。那么你会看到'2019-01-24 11:00:00' 不是一个现有的键,而是一个值。
  • 发帖前我确实想了几分钟,我想我误解了数据。因此问题。通过查看数据,我以某种方式认为时间戳是关键,附加到每个时间戳的值就是值。我会继续寻找。

标签: php json object


【解决方案1】:
$solardata = file_get_contents('solar.json');
$solarjson = json_decode("$solardata");
$production = $solarjson['powerDetails']['meters'][0]['values']['date'];
echo "$production";`

这个输出'2019-01-24 11:00:00';

您也可以通过以下方式修改内容:

$solardata = file_get_contents('solar.json');
$solarjson = json_decode("$solardata");
$solarjson['powerDetails']['meters'][0]['values']['date'] = date(y-m-d);
echo $solarjson['powerDetails']['meters'][0]['values']['date'];`

【讨论】:

  • 我是否正确理解为使该数组按预期工作,我需要修改我的 json_decode 请求以返回一个数组(添加 TRUE)?我的第一次尝试没有奏效。由于数据是一大组时间戳及其相应的功率值,因此我的目标是检索与某些时间戳相关的功率值 - 即我正在寻找与该 '2019-01-24 11:00 相关的功率值:00' 条目(我认为这是一个键,但其他 cmets 说不是)。
  • 嗨亲爱的首先你有一些重叠的数组
  • 这是正确的数据格式{ "powerDetails":{ "timeUnit":"QUARTER_OF_AN_HOUR", "unit":"W", "meters":[ { "type":"Production", "values":[ { "date":"2019-01-24 11:00:00", "value":273.5632 }, { "date":"2019-01-24 11:15:00", "value":405.8625 }, { "date":"2019-01-24 11:30:00", "value":558.6771 } ] } ] } }
  • foreach($solarjson['powerDetails']['meters'] AS $dt){ echo $dt['values']['date']; echo $dt['values']['value']; }这是一种读取数据的方式,如果组织正确,但你的数据在措辞上是错误的
  • 我非常感谢您回复中的详细信息,但我仍在努力理解这一点。我做了两件事。 1)我更改了 json_decode 行,使其输出为数组 2)我将我的 json 代码与您的正确格式示例进行了比较,它们看起来相同 - 除了我的示例只是文件的开头,所以它没有显示右括号和大括号 - 但它们在那里。所以我不知道我的数据在哪里被错误地格式化了。您可爱的代码示例会生成显示“未定义索引:日期”和“值”的服务器错误,所以我的 foreach 数组表达式仍然是错误的。
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多