我正在从另一个网站请求数据,并希望得到一个干净的json数组。
但是我得到了这个:
<pre></pre>{"Status":"Success","Result":1}
不能用json_decode();解析。<
如何从这些数据中提取JSON数组,以便我可以解析它?
注意:我无法控制我从中请求数据的代码。
答案 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);