2015-02-08 2 views
0

решаемых - html_entity_decode был решениемPHP, почему не будет этим JSON декодирования

Моего JSON не декодирование. Может ли кто-нибудь заметить мою ошибку?

Строка JSON выглядит следующим образом:

{"ustaAddr":"1198 Industrial Way","ustaCity":"Carmel, CA","ustaPCode":"90210"} 

Вот код:

$newShipTo = stripslashes($aTrans['new_ship_to']); 
if ($newShipTo != ""){ 
    $arrShipToAddr = json_decode($newShipTo, TRUE); 
    $buyer_addr = $arrShipToAddr['ustaAddr']; 
    $buyer_city = $arrShipToAddr['ustaCity']; 
    $buyer_pcode= $arrShipToAddr['ustaPCode']; 
    $shipTo_addr = 'TEST' . '<p>' .$buyer_addr. '</p><p>'.$buyer_city. '</p><p>'.$buyer_pcode. '</p>' ; 
} 

echo $shipTo_addr; 

Результат:

TEST 

Я также попытался это:

$shipTo_addr = $arrShipToAddr['ustaAddr'] .' - '. $newShipTo; 

Результат:

- {"ustaAddr":"1198 Industrial Way","ustaCity":"Carmel, CA","ustaPCode":"90210"} 

Я также попытался это:

$shipTo_addr = $arrShipToAddr->ustaAddr .' - '. $newShipTo; 

Результат:

- {"ustaAddr":"1198 Industrial Way","ustaCity":"Carmel, CA","ustaPCode":"90210"} 

Может ли кто-нибудь определить, что я сделал неправильно? Я не могу видеть его ...


UPDATE:

json_decode() заявление не удается, но я не могу понять, почему.

$shipTo_addr = (is_array($arrShipToAddr)) ? 'yes' : 'no'; 

Возвращает "нет"


Update Два:

Я жестко текстовую строку, и (копировать/вставить из результата экрана сверху выхода теста!) это сработало! (Конечно, это не решение, так как строка JSON динамически создается в другом месте и извлекается из MySQL).

$newShipTo = '{"ustaAddr":"1198 Industrial Way One","ustaCity":"Carmel, CA Two","ustaPCode":"90210 Free"}'; 
if ($newShipTo != ""){ 
    $arrShipToAddr = json_decode($newShipTo, TRUE); 
    $shipTo_addr = (is_array($arrShipToAddr)) ? 'yes' : 'no'; 
} 

Результат:

yes 

Я также попробовал эти многообещающие предложения, но нет радости:

$newShipTo = json_encode(stripslashes($aTrans['new_ship_to'])); //re-encode using PHP json_encode 

и

$arrShipToAddr = json_decode(utf8_encode($newShipTo), TRUE); //force utf8 
+0

[Работа для меня] (https://eval.in/280450) –

+0

@JohnConde Спасибо, Джон, помогает это знать. – crashwap

+0

'var_dump ($ arrShipToAddr, $ newShipTo)' – zerkms

ответ

0

Ну, ребята, кто-то здесь спросил, было ли что-то необычное в типе поля в базе данных.

Данные, которые хранятся в области, был html_entitied (выглядел следующим образом):

{\&quot;ustaAddr\&quot;:\&quot;1198 Industrial Way Here\&quot;,\&quot;ustaCity\&quot;:\&quot;Carmel, CA We\&quot;,\&quot;ustaPCode\&quot;:\&quot;90210 Go\&quot;} 

Однако после использования stripslashes и json_decode, строка, выводимой как это:

{"ustaAddr":"176 Industrial Drive","ustaCity":"Carmel, CA","ustaPCode":"90210"} 

На во-первых, я подумал, что это тип поля TEXT, и подумал, что переход на VARCHAR был решением. Неа.

Использование stripslashes и json_decode было недостаточным. Чтобы решить эту проблему, я должен был сделать это:

$newShipTo = stripslashes(html_entity_decode($aTrans['new_ship_to'])); 

Таким образом, полный код блок:

$newShipTo = stripslashes(html_entity_decode($aTrans['new_ship_to'])); 
if ($newShipTo != ""){ 
    $arrShipToAddr = json_decode($newShipTo, TRUE); 
    $buyer_addr = $arrShipToAddr['ustaAddr']; 
    $buyer_city = $arrShipToAddr['ustaCity']; 
    $buyer_pcode= $arrShipToAddr['ustaPCode']; 
    $shipTo_addr = '<p>' .$buyer_addr. '</p><p>'.$buyer_city. '</p><p>'.$buyer_pcode. '</p>' ; 
} 
0

Это работает для меня, но Вы можете попробовать:

$arrShipToAddr = json_decode(utf8_encode($newShipTo), TRUE); 
0

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

$newShipTo = '{"ustaAddr":"1198 Industrial Way","ustaCity":"Carmel, CA","ustaPCode":"90210"}'; 

, которые затем могут быть расшифрованы в массив.

+0

Да, я как раз собирался обновить вопрос, чтобы сказать, что я сделал это, и это сработало, но, конечно, я не могу жестко закодировать строку JSON - она ​​динамически создается в другом месте. Вопрос, который я оставил, - это: * Почему я могу копировать/вставлять вывод на экран и декодировать его, но строка перед его получением не декодирует? »* – crashwap

+0

Это не сработает, потому что вы передаете формат JSON в PHP но вместо этого вы должны передать его как строку. Не могли бы вы скопировать код, который устанавливает значение $ aTrans ['new_ship_to'] в первую очередь? – kidA

Смежные вопросы