【问题标题】:Converting XML response from Oracle server to JSON将 Oracle 服务器的 XML 响应转换为 JSON
【发布时间】:2017-05-05 21:25:58
【问题描述】:

我的公司有一项服务,可以在发送序列号时返回有关产品的数据(不确定它在 Oracle 服务器上运行是否重要)。可以通过在此 URL 后附加序列号来访问该服务:

https://example.com/searchserial/v1/W123456789

由于服务需要身份验证,我将序列号请求从 HTML 页面发送到在我的服务器上运行的 PHP。

我正在从 HTML 页面对 PHP 页面进行 AJAX 调用。 serialsearch 变量是用户输入的 SN:

     $.ajax({
    "async": true,
    "url": "./serialsearch.php?serialsearch=" + serialsearch,
    "method": "GET",
    "headers": {
      "accept": "application/json",
      "cache-control": "no-cache",
    }
  }).done(function(response) {
    var renderedHtml = template(response.SerialInfo);
    var context = $("#result").html(renderedHtml);
  });

PHP 看起来像这样:

<?php
$url = 'https://example.com/searchserial/v1/' . $_GET['serialsearch'];
$info = array('Accept: application/json', 'Content-Type: application/json; charset=UTF-8', 'Cache-control: no-cache');
$get_field_string = http_build_query($info, '', '&');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERPWD,'Authorization: Basic blahblahblahblahblahblah=');
curl_setopt($ch, CURLOPT_HTTPHEADER,array($get_field_string)); 
curl_setopt($ch, CURLOPT_HEADER,1);   
$exec = curl_exec($ch);
print_r($exec);
curl_close($ch);
?>

一切正常,除了服务器只返回 XML,但我需要 JSON,以便我可以将响应数据插入 HTML 页面上的 Handlebar 模板。

当我在 Postman 中测试服务并选择 JSON 时,它在第一个字符上出错,这通常是从服务器发送的标头,而不是纯 JSON。 XML 视图显示所有相应的数据。

我是否需要在 PHP 中将 XML 转换为 JSON,然后再将其发送回进行 AJAX 调用的 HTML?在 HTML 页面中转换它?看起来将 XML 转换为 JSON 并不是最直接的事情。

【问题讨论】:

  • 你应该把它转换成php,而不是html

标签: php json ajax


【解决方案1】:

是的,您需要在 PHP 端进行转换。只需将响应读取为 XML 并转换为 JSON

$xml = simplexml_load_string($exec, "SimpleXMLElement", LIBXML_NOCDATA);
echo json_encode($xml);

【讨论】:

  • 我的代码现在看起来像这样:$exec = curl_exec($ch); print_r($exec); $xml = simplexml_load_string($exec, "SimpleXMLElement", LIBXML_NOCDATA); echo json_encode($xml); curl_close($ch); ?&gt; 我仍然得到相同的 XML 响应,没有 JSON。
  • 我不认为 simplexml_load_string 正在工作,因为服务器正在返回一个大标题(例如,HTTP/1.1 200 OK,日期、服务器类型、内容长度等)在 XML 开始之前的 XML 中。 XML 直到 XML 响应中的第 9 行才开始。有办法解决吗?
  • 更新:更改标题行curl_setopt($ch, CURLOPT_HEADER,0);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多