从php中的json数组中获取数据

时间:2016-02-02 17:38:53

标签: php arrays json

我无法访问使用php的json_decode函数检索到的json-Array中的信息。

json文件如下所示:

{"code":0,"message":"Okay","model":{"results":[{"message":"Okay","balance":0,"openPositions":[[],[]],"firstDepositDate":XXX,"currencySign":"€","email":"X.X@X.com","code":0}]},"result":"success"}

我使用以下php代码获取内容:

$json = file_get_contents($json_url);
$data = json_decode($json,true);
echo '<pre>' . print_r($json, true) . '</pre>';

结果print_r显示看起来就像我期望的那样,看起来像json。

但是,我无法弄清楚访问变量。每当我尝试像

这样的东西
$test = $json['model']['results']['balance'];

脚本抛出错误,我无法识别。我已经知道我是否像这样访问$json变量:

$test = $json[n]; // returns the nth character, e.g. n = 0 $test = "{", n = 2 $test = "c"

如果我尝试访问变量,脚本也没​​有抛出错误:

$test = $json['code']; // returns "{"

有人可以帮我弄清楚如何导航这个数组吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

results键是一个真正的数组,而不是无序映射(键/值)。此外,您应该访问已解码的$data,而不是$json字符串。

这应该适合你:

$test = $data['model']['results'][0]['balance'];

这应该让你知道:

{"results":[{"message"
^          ^
|          |
|          \-- Start of an array
|
\-- Start of an object

答案 1 :(得分:1)

您收到类似于Cannot use object of type stdClass as array in (...)的错误吗?

json_decode返回类型stdClass的对象,这是php中唯一的对象(据我所知),哪些属性不能像数组一样被访问。您必须按如下方式访问它们:

$json = '{"code":0,"message":"Okay","model":{"results":[{"message":"Okay","balance":0,"openPositions":[[],[]],"firstDepositDate":"XX","currencySign":"€","email":"X.X@X.com","code":0}]},"result":"success"}';
$obj = json_decode($json);
var_dump($obj->message); //works
var_dump($obj["message"]); //throws exception

答案 2 :(得分:0)

JSON数组中存在错误。 &#34; firstDepositDate&#34;:XXX不是有效值。应该是一个字符串&#34; XXX&#34;。

此外,您正在尝试使用错误的变量。解码后的数据应该是PHP数组。在这种情况下,$ data [&#39;代码&#39;]而不是$ json [&#39;代码&#39;]