无法从 Json 中提取数据

Can't extract data from Json

我无法从 json 中提取从 api 中获取的数据。 我尝试了几个小时,尝试了各种格式。阅读像 这样的 Whosebug 线程,但我看不出我做错了什么。

这是目前的代码:

$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';

$results = json_decode($api_results, true);

// Some variations I tried:
var_dump($results->status[1]);
var_dump($results->data[1]->opening_price);
var_dump($results["data"][1]["opening_price"]);

最终结果:NULL NULL NULL

我做错了什么?

感谢您的解答!我会投票给工作人员。看来我对格式感到困惑!

<?php

$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';


$results = json_decode($api_results, true);
print_r($results['status']);
echo "</br>";
print_r($results['data']['opening_price']);

尝试以这种方式访问​​您的数组。

输出是:

0000
6998000

留意嵌套数组。您需要先访问它们的父数组才能获取它们的值。

json_decode 中删除 true 这样你就会得到像 Demo

这样的对象结果
$results = json_decode($api_results);
var_dump($results->status);
var_dump($results->data->opening_price);

当您将 json_decode 与 true 一起使用时,返回的对象将被转换为关联数组。

从 json_decode 中删除 true 并尝试这样的操作:

var_dump($results->status);
var_dump($results->data->opening_price);

如果您看到 {},它指的是对象,而 [] 表示它是一个数组。您试图将所有内容都显示为数组

您已将 json_decode() 的第二个参数设置为 true。这意味着 json 将被转换为数组,因此您无法使用指针 -> 访问数据(因为它不是对象)。

您可以这样访问数据:

var_dump($results['status'][0]);
var_dump($results['data'][0]['opening_price']);

P.S:尝试var_dump($results)查看确切的数据,这样您就知道如何访问每个属性。

您是否阅读了 json_decode() (or, at least, the accepted answer of the question you linked)? If you pass TRUE as the second argument to json_decode() (and there is no decent reason to not pass it) then it decodes the JSON to associative arrays 而不是对象的文档。

可以使用 the square bracket syntax.

访问 PHP 数组中的元素

print_r($results) 的简单调用说明其结构:

Array
(
    [status] => 0000
    [data] => Array
        (
            [opening_price] => 6998000
            [closing_price] => 7270000
            [min_price] => 6750000
            [max_price] => 7997000
            [average_price] => 7188302.5804
            [units_traded] => 78484.9241002
            [volume_1day] => 78484.9241002
            [volume_7day] => 335611.84181738
            [buy_price] => 7268000
            [sell_price] => 7274000
            [date] => 1510563513031
        )
)

现在,访问它的项目是小菜一碟:

echo($results['status']);
# 0000
echo($results['data']['opening_price']);
# 6998000

像我认为的那样使用这段代码..

<?php
$api_results = '{"status":"0000","data":{"opening_price":"6998000","closing_price":"7270000","min_price":"6750000","max_price":"7997000","average_price":"7188302.5804","units_traded":"78484.9241002","volume_1day":"78484.9241002","volume_7day":"335611.84181738","buy_price":"7268000","sell_price":"7274000","date":"1510563513031"}}';
$results = json_decode($api_results);

print_r($results);
var_dump($results->status);
$var = $results->data;
var_dump($var->opening_price);
?>

stdClass Object
(
    [status] => 0000
    [data] => stdClass Object
        (
            [opening_price] => 6998000
            [closing_price] => 7270000
            [min_price] => 6750000
            [max_price] => 7997000
            [average_price] => 7188302.5804
            [units_traded] => 78484.9241002
            [volume_1day] => 78484.9241002
            [volume_7day] => 335611.84181738
            [buy_price] => 7268000
            [sell_price] => 7274000
            [date] => 1510563513031
        )

)

string(4) "0000"
string(7) "6998000"