在PHP中访问没有名称的数组

时间:2017-11-01 08:09:30

标签: php json

我正在尝试访问仅在一个数组中的解码json元素,例如:

 [
    {
    timestamp: 1509523044,
    tid: 83450451,
    price: "6381.0",
    amount: "1.0",
    type: "sell"
    },
    {
    timestamp: 1509523044,
    tid: 83450448,
    price: "6380.0",
    amount: "1.12894377",
    type: "buy"
    }
 ]

我试过了

$json = json_decode($result); 

echo $json[0]->price;
echo $json->[0]price;
echo $json->[0]->price;

不断收到错误,例如:

  

致命错误:无法在

中使用stdClass类型的对象作为数组

如何在没有数组名称的情况下访问每个单独的元素?感谢

3 个答案:

答案 0 :(得分:4)

你的json格格不入:为了拥有一个有效的json你应该有这样的东西:

<?php
$a = '[{
    "timestamp": 1509523044,
    "tid": 83450451,
    "price": "6381.0",
    "amount": "1.0",
    "type": "sell"
},
{
    "timestamp": 1509523044,
    "tid": 83450448,
    "price": "6380.0",
    "amount": "1.12894377",
    "type": "buy"
}
]';
$b = json_decode($a, true);
var_dump($b);

这将返回您需要的数组

答案 1 :(得分:1)

当您使用json_decode时,您会得到一个对象。如果需要数组,则必须将第二个参数设置为true

$json = json_decode($result, true); 

否则你有一个对象,你必须像对象一样访问所有对象。您可以使用var_dump($json);进行检查。通常,最好使用对象版本而不是数组版本。但有时你需要数组。

编辑:

我在评论中写的你的json是无效的,但是你给我的原始版本它运行良好。

var_dump(json_decode(file_get_contents('https://api.bitfinex.com/v1/trades/BTCUSD'), true));

使用您的示例输入它正在工作。

答案 2 :(得分:0)

因为它不是一个正确的json,你必须在解码之前使它正确。

这里我使用正则表达式将键替换为“键”。

$str = ' [
{
timestamp: 1509523044,
tid: 83450451,
price: "6381.0",
amount: "1.0",
type: "sell"
},
{
timestamp: 1509523044,
tid: 83450448,
price: "6380.0",
amount: "1.12894377",
type: "buy"
}
]';


$json = json_decode(preg_replace('/(\w+):/', '"$1":', $str));
Echo $json[0]->price;

https://www.youtube.com/watch?v=xd5TCWmaxGI