API在HTML中返回JSON。这是正常的吗?

时间:2016-06-03 12:20:12

标签: php html json html-parsing

我有一个项目,我必须处理在线营销平台提供的API,以便注册用户和其他典型(以及此处无关紧要的)操作。

今天他们向我发送了API文档,我很困惑,因为它指定字面上“...它返回一个返回JSON的HTML ......”。它显示了一个这样的例子:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="XX:pagetag" content="" /> 
    <meta name="XX:flowtag" content="" /> 
</head> 
<body leftmargin='0' rightmargin='0' topmargin='0' bottommargin='0' bgcolor='#FFFFFF'> 
    <RESULT>[{ &quot;userid&quot;: 1, &quot;status&quot;: &quot;OK&quot; }]</RESULT> 
</body> 
</html> 

所以我有两个问题:

  1. 为什么有人会以这种方式构建API?这对我来说真的没有意义。以什么方式比使用适当的JSON头只返回JSON更好?也许我一直在想念......

  2. 使用PHP,这是解析此响应并获取实际JSON的最佳方法吗?我在SO中阅读了多个answers和评论,因此不鼓励使用正则表达式解析HTML,但到目前为止,这是我能想到的唯一方法。我试过了:

    // This will be a CURL call:
    $response = file_get_contents('./example-response.html');
    
    $regexp = '/<RESULT>(.*)<\/RESULT>/';
    $matches = [];
    preg_match($regexp, $response, $matches);
    print_r($matches);
    
  3. 顺便说一句,这段代码在我的MAMP服务器中不起作用,但它在https://www.functions-online.com/preg_match.html ...

    任何建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 你是对的,这看起来很疯狂。
  2. 您可以使用PHP's SimpleXMLElement及其xpath方法来解析HTML。别忘了忘记那些不幸的事情:)。