从数据中提取 JSON 数组

Posted

技术标签:

【中文标题】从数据中提取 JSON 数组【英文标题】:Extract JSON Array from data 【发布时间】:2014-07-05 04:09:58 【问题描述】:

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

但是我得到了这个:

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

不会用 json_decode(); 解析。

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

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

【问题讨论】:

数据从何而来?这正是从远程服务器返回的,还是你echoed 的?问题是“这些 html 标签是从哪里来的?”如果它们来自远程服务器,那么您需要让管理员知道他们的 API 中有错误。如果您的代码以某种方式添加了它们,那么您就知道错误在您的代码中。 他们来自远程服务器。是的,我提醒了程序员 简单地说,str_replace("&lt;pre&gt;&lt;/pre&gt;", "", $json_string); 怎么样? 标签的内容并不总是空的。这取决于查询。 【参考方案1】:

仅删除&lt;pre&gt;&lt;/pre&gt;,仅当它是第一件事时:

$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 包含 &lt;pre&gt;&lt;/pre&gt; 怎么办?它是编码还是转义,所以它不会删除它? @Rudie,是的,好点。您的preg_replace('#^&lt;pre&gt;&lt;/pre&gt;#', '', $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】:

假设&lt;pre&gt;&lt;/pre&gt;是常量,那么只是一个简单的子串操作:

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

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

【讨论】:

不幸的是,它并不总是恒定的。

以上是关于从数据中提取 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 数组中提取数据以创建 3 个不同的数组

使用 swift Codable 从 JSON 数组中提取数据

从 JSON 数组中的字符串中提取字段

从 BigQuery 数据 JSON 中的数组中提取索引值

如何从 MySQL 中提取 JSON 数组

Bigquery:从 json 数组中提取数据