json — доступ к массиву в PHP без имени

Я пытаюсь получить доступ к декодированным элементам 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 в качестве массива в

Как я могу получить доступ к каждому отдельному элементу без имени массива? Спасибо

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));

с вашим примером ввода это работает.

1

Другие решения

Ваш 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);

Это вернет нужный вам массив

4

Потому что это не правильный 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://3v4l.org/MMTvm

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector