Я пытаюсь получить доступ к декодированным элементам 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 в качестве массива в
Как я могу получить доступ к каждому отдельному элементу без имени массива? Спасибо
Когда вы используете 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));
с вашим примером ввода это работает.
Ваш 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);
Это вернет нужный вам массив
Потому что это не правильный 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;