json_decode无效

时间:2016-06-17 08:58:12

标签: php json

我有以下JSON:

{"easyStoreRelayList":[],"DecathlonStoreAreaNoStoreInGroup":"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio \"ACQUISTA ON LINE RITIRA IN NEGOZIO\" oppure non sono presenti negozi Decathlon.","warehouseRelayList":[],"DecathlonStoreAreaRememberMe":"Riconoscimi alla prossima visita","DecathlonWarehouseParcelSection":"Magazzini","DecathlonStoreParcelSection":"Negozio DECATHLON","DecathlonEasyStoreParcelSection":"Negozio DECATHLON EASY","geoName":"Alessandria","physicalStoreList":[["PS_IT_45","Serravalle Scrivia (Alessandria)","471",null,"7",null]]}

这是我的代码,尝试以json格式使用它,以便我更容易使用这些信息。

//$html is the var containing the original string befora trying to parse it to JSON

    $html = stripslashes(str_replace('\"', '"', $html));
    $obj = json_decode($html,true);
    $obj = rtrim($obj, "\0");


    echo $obj["DecathlonStoreAreaNoStoreInGroup"];
    if(json_last_error() == 4){
        echo "ERROR";
    }

我不断收到错误:非法字符串偏移' DecathlonStoreAreaNoStoreInGroup',错误4为" json_last_error"。

任何kwnos它可能是什么,这不是正确地解析json ??

3 个答案:

答案 0 :(得分:3)

你的第一个问题是这一行:

$html = stripslashes(str_replace('\"', '"', $html));

解析JSON时,您不需要执行任何此类操作。如果JSON有效,则上面的行将使其无效。如果它在你得到它时无效,那么该行中的任何内容都不足以修复它。

所以要做的第一件事就是删除该行。

事实证明,您的JSON也无效。它包含一个由双引号限定的字符串中的双引号字符。

"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio "ACQUISTA ON LINE RITIRA IN NEGOZIO" oppure non sono presenti negozi Decathlon."

这部分JSON无效,无法由json_encode()解析。

但是,您无法在PHP程序中轻松解决此问题。您需要修复生成此无效JSON的系统。一旦它作为无效字符串到达​​您的PHP代码,您就无法做到这一点。

答案 1 :(得分:0)

"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio "ACQUISTA ON LINE RITIRA IN NEGOZIO" oppure non sono presenti negozi Decathlon."

下面。看看你在主要报价中使用了相同的引号,因此AQUISTA ON LINE ...被认为不在字符串中。 将其转换为:

  

“Nella zona che hai selezionato nessun negoz neathzio Decathlon al momento   effettua il servizio'ACQUISTA ON LINE RITIRA IN NEGOZIO'的压力非   sono presenti negozi迪卡侬。“

修改:$html = stripslashes(str_replace('\"', '"', $html)); 你的意思不是$html = stripslashes(str_replace('"', '\"', $html));

答案 2 :(得分:0)

"DecathlonStoreAreaNoStoreInGroup":"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio "ACQUISTA ON LINE RITIRA IN NEGOZIO" oppure non sono presenti negozi Decathlon."

上面的脚本在字符串中有",这是无效的JSON格式。为了使其正确,请在"之前在字符串中添加斜杠。

"DecathlonStoreAreaNoStoreInGroup":"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio \"ACQUISTA ON LINE RITIRA IN NEGOZIO\" oppure non sono presenti negozi Decathlon."

有效的JSON将是:

{  
   "easyStoreRelayList":[  

   ],
   "DecathlonStoreAreaNoStoreInGroup":"Nella zona che hai selezionato nessun negozio Decathlon al momento effettua il servizio \"ACQUISTA ON LINE RITIRA IN NEGOZIO\" oppure non sono presenti negozi Decathlon.",
   "warehouseRelayList":[  

   ],
   "DecathlonStoreAreaRememberMe":"Riconoscimi alla prossima visita",
   "DecathlonWarehouseParcelSection":"Magazzini",
   "DecathlonStoreParcelSection":"Negozio DECATHLON",
   "DecathlonEasyStoreParcelSection":"Negozio DECATHLON EASY",
   "geoName":"Alessandria",
   "physicalStoreList":[  
      [  
         "PS_IT_45",
         "Serravalle Scrivia (Alessandria)",
         "471",
         null,
         "7",
         null
      ]
   ]
}