Php 从数据中提取JSON数组
我正在从另一个网站请求数据,希望得到一个干净的json数组。Php 从数据中提取JSON数组,php,regex,json,sanitization,Php,Regex,Json,Sanitization,我正在从另一个网站请求数据,希望得到一个干净的json数组。 然而,我得到的却是: <pre></pre>{"Status":"Success","Result":1} {“状态”:“成功”,“结果”:1} 它不会用json_decode()解析 如何从这些数据中提取JSON数组,以便对其进行解析 注意:我无法控制请求数据的代码。假设为常量,则只需执行一个简单的子字符串操作: $result = '<pre></pre>{"Status":"S
然而,我得到的却是:
<pre></pre>{"Status":"Success","Result":1}
{“状态”:“成功”,“结果”:1}
它不会用json_decode()解析如何从这些数据中提取JSON数组,以便对其进行解析 注意:我无法控制请求数据的代码。假设
为常量,则只需执行一个简单的子字符串操作:
$result = '<pre></pre>{"Status":"Success","Result":1}';
if (strpos($result ,'<pre>') !== false)
{
$array = json_decode(substr($result , 11));
}
else
{
$array = json_decode($result);
}
$output_array = array();
$badstr = '<pre></pre>{"Status":"Success","Result":1}';
preg_match("/{.*}/", $badstr, $output_array);
$badstr='{“状态”:“成功”,“结果”:1}';
$json_string = '<pre></pre>{"Status":"Success","Result":1}';
$json = str_replace("<pre></pre>", "", $json_string);
echo $json;
$goodstr=substr($badstr,11);
但是你真的应该对服务器管理员大喊大叫,因为他们首先发送了错误的json。这种事没有任何借口。这可能是他们忘记取出的一些调试代码。如果您希望它现在同时工作,并且问题解决后,您可以执行以下操作:
{"Status":"Success","Result":1}
$result='{“状态”:“成功”,“结果”:1};
$not_json = '<pre></pre>{"Status":"Success","Result":1}';
$json_string = strip_tags($json);
$result = json_decode($json_string);
if(strpos($result,,)!==false)
{
$array=json_解码(substr($result,11));
}
其他的
{
$array=json_decode($result);
}
试试这个
$output_array=array();
$badstr='{“状态”:“成功”,“结果”:1}';
preg_匹配(“/{.*}/”,$badstr,$output_数组);
在
$output\u数组[0]
中,您有您的json字符串。简单地替换字符串怎么样
像这样:
如果输出中不需要任何html标记,也可以使用
strip\u tags()
:
$not_json='{“状态”:“成功”,“结果”:1}';
$json\u string=strip\u标记($json);
$result=json\u decode($json\u字符串);
仅删除
,前提是它是第一件事:
$response=preg#u replace(“#^#,”,“$response);
这些数据来自哪里?这正是从远程服务器返回的内容,还是您echo
ed的内容?问题是“这些HTML标记从何而来?”如果它们来自远程服务器,那么您需要让管理员知道它们的API中存在错误。如果它们是由您的代码添加的,那么您就知道错误在您的代码中。它们来自远程服务器。是的,我提醒了程序员。简单地说,str\u replace(“,”,$json\u string)代码>?标记的内容并不总是空的。它取决于查询。不幸的是,它并不总是常量。如果JSON包含一个
?它是编码的还是转义的,这样就不会删除它了?@Rudie,是的,说得好。你的preg_replace(“#^#,”,“$response)代码>答案更好。向上投票……)这是一个共同的解决办法。不要使用它,因为它现在就可以工作。也许明天会有HTML。@Rudie当然,但不清楚添加的字符是/可以是什么,也不清楚json可以包含什么,因此这实际上适用于所有答案。如果它也能从标记中剥离所有内容,那么它也会起作用。@BenA.Noone您需要更具体地说明数据可以包含什么和不能包含什么,因为现在只是猜测而已。在预标记之间?文本和html,但不可能是数组。
$not_json = '<pre></pre>{"Status":"Success","Result":1}';
$json_string = strip_tags($json);
$result = json_decode($json_string);
$response = preg_replace('#^<pre></pre>#', '', $response);