echo rest api без включения {} и т. д. (эхо по-своему) [duplicate]

Прямо из спецификаций API для ClassCastException :

Брошено, чтобы указать, что код попытался передать объект подклассу, из которого он не экземпляр.

Так, например, когда вы пытаетесь передать Integer в String, String не является подклассом Integer, поэтому a ClassCastException.

Object i = Integer.valueOf(42);
String s = (String)i;            // ClassCastException thrown here.

316
задан Avishake 16 December 2016 в 12:39
поделиться

10 ответов

В соответствии с документацией вам нужно указать, хотите ли вы ассоциативный массив вместо объекта из json_decode, это будет код:

json_decode($jsondata, true);
654
ответ дан Francisco Corrales Morales 19 August 2018 в 17:19
поделиться
  • 1
    Он задает вопрос, каковы преимущества его возвращения как массива, а не объекта? – Foxinni 16 August 2012 в 14:31
  • 2
    Это поднимает вопрос. Чтобы «спросить вопрос», означает предположить то, что еще предстоит доказать ( ref ). В любом случае преимущество может заключаться в том, что OP более удобен для перемещения массивов, чем объектов, или что какой-то другой, уже реализованный код требует массива. – jamesnotjim 6 March 2013 в 17:31
  • 3
    @jamesnotjim Реализация по умолчанию, возвращающая объект, может спросить, что объекты лучше возвращают значения, чем массивы, не так ли? – David Mann 13 November 2013 в 04:43
  • 4
    Действительно, это может @DavidMann. Туше! – jamesnotjim 13 November 2013 в 20:53
  • 5
    Я бы добавил комментарий (хотя и спустя годы), что нет возможности JSON, содержащего ничего, кроме данных, делающих это смешающим «стандартным». выбор. – Barry 25 July 2016 в 16:13

На всякий случай, если вы работаете с php less than 5.2, вы можете использовать этот ресурс.

http://techblog.willshouse.com/2009/06/12/using-json_encode- and-json_decode-in-php4 /

http://mike.teczno.com/JSON/JSON.phps

5
ответ дан Anuj Pandey 19 August 2018 в 17:19
поделиться

В соответствии с функция PHP Documentation json_decode имеет параметр с именем assoc, который преобразует возвращенные объекты в ассоциативные массивы

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

Поскольку параметр-параметр FALSE равен default. Вы должны установить это значение в TRUE, чтобы получить массив.

Изучите приведенный ниже код для импликации примера:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));

, который выводит:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
2
ответ дан Arosha De Silva 19 August 2018 в 17:19
поделиться

json_decode поддерживает второй аргумент, когда он установлен на TRUE, он вернет Array вместо stdClass Object. Проверьте страницу Manual функции json_decode, чтобы увидеть все поддерживаемые аргументы и ее детали.

Например, попробуйте следующее:

$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!
2
ответ дан Bugs 19 August 2018 в 17:19
поделиться

Это также изменит его на массив:

<?php
    print_r((array) json_decode($object));
?>
5
ответ дан coreyavis 19 August 2018 в 17:19
поделиться
  • 1
    Это пустая трата CPU / Memory, как предложено json_decode($object, true);, true делает то же самое, внутренне намного быстрее. – TCB13 12 December 2013 в 02:13
  • 2
    @ TCB13, за исключением случаев, когда вам нужно обоим и не хотите снова запускать декодирование – Jimmy Kane 21 January 2015 в 11:26
  • 3
    Согласитесь с @JimmyKane. Я пробовал и запускал обе версии в цикле; если вам нужен как объект, так и массив (хотя это должно произойти редко?), json_decode + литье на 45% быстрее, чем запуск обоих ароматов json_decode. С другой стороны, обе они настолько быстры, что, если вам не требуется буквально тысяч декодирования, разница незначительна. – LSerni 29 May 2015 в 10:35
  • 4
    @lserni correct – Jimmy Kane 29 May 2015 в 11:06
  • 5
    Если у вас есть глубокая структура JSON, это не сработает. – penyaskito 31 July 2015 в 12:16

Попробуйте это

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, true);
echo "<pre>"; print_r($obj['Result']);
?>
1
ответ дан Dipali Sakle Systematix 19 August 2018 в 17:19
поделиться

Попробуйте вот так:

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
  echo $value->id; //change accordingly
}
0
ответ дан lalithkumar 19 August 2018 в 17:19
поделиться

Это поздний вклад, но есть действительный случай для кастинга json_decode с (array). Рассмотрим следующее:

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

Если $jsondata когда-либо возвращается как пустая строка (как это часто бывает у меня), json_decode вернет NULL, что приведет к ошибке Предупреждение: Недопустимый аргумент, предоставленный foreach () в строке 3. Вы можете добавить строку if / then code или trernary operator, но IMO - это просто изменить строку 2 на ...

$arr = (array) json_decode($jsondata,true);

. .. если вы не набрали миллионы больших массивов одновременно, и в этом случае, как указывает @ TCB13, производительность может быть отрицательно выполнена.

17
ответ дан neokio 19 August 2018 в 17:19
поделиться

попробуйте это

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
35
ответ дан Pang 19 August 2018 в 17:19
поделиться

в PHP json_decode конвертировать json-данные в связанный с PHP массив. Для Ex: $php-array= json_decode($json-data, true); print_r($php-array);

0
ответ дан Salman Mohammad 19 August 2018 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: