у меня есть
$string = $_REQUEST['COM_node'];
он кодирует строку
{"cmp_class":"ProfileReferences","auto_id":"cmp14","forms":[],"parent":{"cmp_class":"PrivateMediaNetworkList","auto_id":"httpdoc"}}
Когда я попробовал
$nodeArray = json_decode($string, true);
возвращает NULL. Но когда я дал
$string = '{"cmp_class":"ProfileReferences","auto_id":"cmp14","forms":[],"parent":{"cmp_class":"PrivateMediaNetworkList","auto_id":"httpdoc"}}'; $nodeArray = json_decode($string, true);
Он работает нормально. Я googled, но никакого решения. Помоги мне, пожалуйста.
Вы уверены, что ваш $ _REQUEST ['COM_node'] содержит точную строку без какого-либо скрытого символа, такого как спецификация UTF-8 или аналогичная?
$string = chr(239).chr(187).chr(191).'{"cmp_class":"ProfileReferences","auto_id":"cmp14","forms":[],"parent":{"cmp_class":"PrivateMediaNetworkList","auto_id":"httpdoc"}}'; var_dump($string); // returns your string, although there are hidden chars $nodeArray = json_decode($string,true); var_dump($nodeArray); // returns NULL
Попробуйте сравнить его с:
$string = '{"cmp_class":"ProfileReferences","auto_id":"cmp14","forms":[],"parent":{"cmp_class":"PrivateMediaNetworkList","auto_id":"httpdoc"}}'; var_dump($_REQUEST['COM_node'] == $string);
Если результат ложный, вам нужно будет выяснить, какие символы нужно обрезать.
EDIT: вы можете изменить строку, чтобы получить только часть, начинающуюся с первого {и заканчивая последним}
preg_match("/{(.*)}/",$string,$matches); $string = $matches[0];
Передача true
поскольку второй параметр json_decode()
возвращает массив. Вам нужно будет использовать print_r()
для его просмотра; echo()
не будет работать.
php > $string = '{"cmp_class":"ProfileReferences","auto_id":"cmp14","forms":[],"parent":{"cmp_class":"PrivateMediaNetworkList","auto_id":"httpdoc"}}'; php > echo json_decode($string, true); PHP Notice: Array to string conversion in php shell code on line 1 php > print_r($json_decode($string, true)); Array ( [cmp_class] => ProfileReferences [auto_id] => cmp14 [forms] => Array ( ) [parent] => Array ( [cmp_class] => PrivateMediaNetworkList [auto_id] => httpdoc ) )