从数据中提取 JSON 数组
Posted
技术标签:
【中文标题】从数据中提取 JSON 数组【英文标题】:Extract JSON Array from data 【发布时间】:2014-07-05 04:09:58 【问题描述】:我正在从另一个网站请求数据,并期望得到一个干净的 json 数组作为回报。
但是我得到了这个:
<pre></pre>"Status":"Success","Result":1
不会用 json_decode(); 解析。
如何从这些数据中提取 JSON 数组以便解析它?
注意:我无法控制我从中请求数据的代码。
【问题讨论】:
数据从何而来?这正是从远程服务器返回的,还是你echo
ed 的?问题是“这些 html 标签是从哪里来的?”如果它们来自远程服务器,那么您需要让管理员知道他们的 API 中有错误。如果您的代码以某种方式添加了它们,那么您就知道错误在您的代码中。
他们来自远程服务器。是的,我提醒了程序员。
简单地说,str_replace("<pre></pre>", "", $json_string);
怎么样?
标签的内容并不总是空的。这取决于查询。
【参考方案1】:
仅删除<pre></pre>
,仅当它是第一件事时:
$response = preg_replace('#^<pre></pre>#', '', $response);
【讨论】:
【参考方案2】:如果您不希望输出中有任何 html 标签,您也可以使用strip_tags()
:
$not_json = '<pre></pre>"Status":"Success","Result":1';
$json_string = strip_tags($json);
$result = json_decode($json_string);
【讨论】:
这是一个巧合的修复。不要使用它,因为它现在可以工作。也许明天会有 HTML。 @Rudie 当然,但不清楚添加的字符是什么 / 可以是什么,也不清楚 json 可以包含什么,以便真正适用于所有答案。 如果它也能剥离标签内的所有内容,它会起作用。 @BenA.Noone 您需要更具体地了解数据可以包含什么和不可以包含什么,因为它现在只是在猜测。 在前置标签之间? text 和 html,但不太可能是数组。【参考方案3】:简单的字符串替换怎么样?
像这样:
$json_string = '<pre></pre>"Status":"Success","Result":1';
$json = str_replace("<pre></pre>", "", $json_string);
echo $json;
输出:
"Status":"Success","Result":1
【讨论】:
如果 JSON 包含<pre></pre>
怎么办?它是编码还是转义,所以它不会删除它?
@Rudie,是的,好点。您的preg_replace('#^<pre></pre>#', '', $response);
答案更好。赞成.. :)【参考方案4】:
试试这个
$output_array = array();
$badstr = '<pre></pre>"Status":"Success","Result":1';
preg_match("/.*/", $badstr, $output_array);
在$output_array[0]
你有你的 json 字符串。
【讨论】:
【参考方案5】:如果您希望它现在同时工作,并且一旦问题得到解决,您可以这样做:
$result = '<pre></pre>"Status":"Success","Result":1';
if (strpos($result ,'<pre>') !== false)
$array = json_decode(substr($result , 11));
else
$array = json_decode($result);
【讨论】:
【参考方案6】:假设<pre></pre>
是常量,那么只是一个简单的子串操作:
$badstr = '<pre></pre>"Status":"Success","Result":1';
$goodstr = substr($badstr, 11);
但是你真的应该对服务器管理员大喊大叫,因为他们首先发送了错误的 json。这种事情没有任何借口。这可能是他们忘记取出的一些调试代码。
【讨论】:
不幸的是,它并不总是恒定的。以上是关于从数据中提取 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章