从数据中提取JSON数组

时间:2014-05-16 16:02:41

标签: php regex json sanitization

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

但是我得到了这个:

<pre></pre>{"Status":"Success","Result":1}

不能用json_decode();解析。<

如何从这些数据中提取JSON数组,以便我可以解析它?

注意:我无法控制我从中请求数据的代码。

6 个答案:

答案 0 :(得分:5)

试试这个

$output_array = array();

$badstr = '<pre></pre>{"Status":"Success","Result":1}';

preg_match("/{.*}/", $badstr, $output_array);

$output_array[0]中你有你的json字符串。

答案 1 :(得分:1)

假设<pre></pre>是常量,那么只需要一个简单的子字符串操作:

$badstr = '<pre></pre>{"Status":"Success","Result":1}';
$goodstr = substr($badstr, 11);

但你真的应该对服务器管理员大喊大叫,因为他们首先发送了糟糕的json。这种事情没有任何借口。它可能是他们忘记取出的一些调试代码。

答案 2 :(得分:1)

如果您希望它现在都可以使用,并且一旦问题得到解决,您就可以执行此操作:

$result = '<pre></pre>{"Status":"Success","Result":1}';

if (strpos($result ,'<pre>') !== false) 
{
    $array = json_decode(substr($result , 11));
}
else
{
    $array = json_decode($result);
}

答案 3 :(得分:1)

仅删除<pre></pre>,只有这是第一件事:

$response = preg_replace('#^<pre></pre>#', '', $response);

答案 4 :(得分:0)

如何简单地替换字符串?

像这样:

$json_string = '<pre></pre>{"Status":"Success","Result":1}';

$json = str_replace("<pre></pre>", "", $json_string);

echo $json;

输出:

{"Status":"Success","Result":1}

答案 5 :(得分:0)

如果您不希望输出中包含任何html标记,也可以使用strip_tags()

$not_json = '<pre></pre>{"Status":"Success","Result":1}';
$json_string = strip_tags($json);
$result = json_decode($json_string);