繁体   English   中英

PHP为什么不使用此JSON解码

[英]PHP why won't this JSON decode

解决 -html_entity_decode是解决方案

我的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"}

谁能发现我做错了什么? 我看不到...


更新:

json_decode()语句失败,但是我不明白为什么。

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

返回“否”


更新二:

我对文本字符串进行了硬编码(从以上测试输出的屏幕结果中复制/粘贴!),它起作用了! (当然,这不是解决方案,因为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

它对我有用,但是您可以尝试:

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

尝试这个:

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

然后可以将其解码为数组。

伙计们,这里有人问数据库中的字段类型是否有异常。

存储在字段中的数据是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;}

但是,在使用stripslashesjson_decode ,字符串输出如下:

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

起初,我认为这是TEXT字段类型,并认为更改为VARCHAR是解决方案。 不。

仅使用stripslashesjson_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>' ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM