Прямо из спецификаций API для ClassCastException
:
Брошено, чтобы указать, что код попытался передать объект подклассу, из которого он не экземпляр.
Так, например, когда вы пытаетесь передать
Integer
вString
,String
не является подклассомInteger
, поэтому aClassCastException
.Object i = Integer.valueOf(42); String s = (String)i; // ClassCastException thrown here.
В соответствии с документацией вам нужно указать, хотите ли вы ассоциативный массив вместо объекта из json_decode
, это будет код:
json_decode($jsondata, true);
На всякий случай, если вы работаете с php less than 5.2, вы можете использовать этот ресурс.
http://techblog.willshouse.com/2009/06/12/using-json_encode- and-json_decode-in-php4 /
В соответствии с функция 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)
}
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!
Это также изменит его на массив:
<?php
print_r((array) json_decode($object));
?>
json_decode($object, true);
, true
делает то же самое, внутренне намного быстрее.
– TCB13
12 December 2013 в 02:13
json_decode
+ литье на 45% быстрее, чем запуск обоих ароматов json_decode
. С другой стороны, обе они настолько быстры, что, если вам не требуется буквально тысяч i> декодирования, разница незначительна.
– LSerni
29 May 2015 в 10:35
Попробуйте это
<?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']);
?>
Попробуйте вот так:
$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
}
Это поздний вклад, но есть действительный случай для кастинга 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, производительность может быть отрицательно выполнена.
попробуйте это
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
в PHP json_decode конвертировать json-данные в связанный с PHP массив. Для Ex: $php-array= json_decode($json-data, true);
print_r($php-array);