我正在尝试访问仅在一个数组中的解码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类型的对象作为数组
如何在没有数组名称的情况下访问每个单独的元素?感谢
答案 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;