我有以下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 ??
答案 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
]
]
}