Php 从数据中提取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

我正在从另一个网站请求数据,希望得到一个干净的json数组。

然而,我得到的却是:

<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);