【问题标题】:PHP JSON decoding with one square bracket带一个方括号的 PHP JSON 解码
【发布时间】:2014-03-09 07:32:56
【问题描述】:

好的,所以我正在使用 php 获取市场数据,它运行良好,但我遇到了一个 api,它给了我这个 [{"market_id":"16","code":"DOGE","last_price":"0.00000136","yesterday_price":"0.00000140","exchange":"BTC","change":"-2.86","24hhigh":"0.00000150","24hlow":"0.00000132","24hvol":"6.544"}]

通常我会用这段代码来获取它

$data = curl_exec($c);
curl_close($c);
$obj = json_decode($data);
$doge = print_r($obj->{'last_price'}."\n", true);

但由于括号"[",它不起作用。没有其他 api 有这些。

我如何绕过它们来获取信息?

【问题讨论】:

  • so,var_dump 解码前的数据,看看它是什么类型。
  • $obj[0]->{"last_price"}
  • 它只是一个包装数组。
  • 仅供参考,“没有其他 API 具有这些 [括号]”是不正确的。 Arrays are a perfectly normal part of JSONdo 出现在无数的 API 中。您可能只是第一次看到它们,这很好。
  • 你应该使用 json_decode($json,true) 这样jsonArray里面的json也可以处理

标签: php arrays json function


【解决方案1】:

当你对你的对象做一个print_r时,你可以看到这样的结构。

Array
(
    [0] => stdClass Object
        (
            [market_id] => 16
            [code] => DOGE
            [last_price] => 0.00000136
            [yesterday_price] => 0.00000140
            [exchange] => BTC
            [change] => -2.86
            [24hhigh] => 0.00000150
            [24hlow] => 0.00000132
            [24hvol] => 6.544
        )

)

所以要访问它,你可以看到last_price在数组索引0下,所以你需要在你的对象之前提供index

访问方式..

echo $doge =$obj[0]->last_price;

(或)

echo $doge =$obj[0]->{'last_price'};

Demo

【讨论】:

  • 你应该真正解释OP做错了什么,而不仅仅是给出代码解决方案。
  • @MikeBrant,谢谢。
【解决方案2】:

您得到的响应实际上是array。第一个(也是您的唯一一个)元素是object。因此,为了访问这个object,您只需调用:

$array = json_decode($data);
$obj = $array[0];
$doge = print_r($obj->{'last_price'}."\n", true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多