【问题标题】:How to convert SOAP API response from XML to JSON如何将 SOAP API 响应从 XML 转换为 JSON
【发布时间】:2017-09-28 17:22:45
【问题描述】:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetCategoriesJsonResponse xmlns="http://tempuri.org/">
        <GetCategoriesJsonResult>[{"code":"0","description":"Sides","storeNumber":"3733"},{"code":"1","description":"Sandwiches","storeNumber":"3733"},</GetCategoriesJsonResult>
        </GetCategoriesJsonResponse>
    </s:Body>
</s:Envelope>

这是 API 的结果,但我想将其转换为:

[
    {
        "code": "0",
        "description": "Sides",
        "storeNumber": "3733"
    },
    {
        "code": "1",
        "description": "Sandwiches",
        "storeNumber": "3733"
    },
]

我该怎么做?我试过json_encodejson_decode 但对我不起作用。我已经应用了不同的方法来转换它,但它仍然显示 XML 结果。谁能告诉我如何将其转换为 JSON?

【问题讨论】:

  • 您是否尝试将其从文本转换为对象?或者您是否想在单独的行上漂亮地打印 JSON?
  • 我想获得 json 响应以在其中进行迭代我如何在 php 中做到这一点

标签: php json xml api soap


【解决方案1】:

这里是关于使用 xml https://stackoverflow.com/a/3577662/3266626 的可用选项的一个很好的答案

我用FluentDom

$xml = file_get_contents("xml_file.xml");
$doc = new DOMDocument();
$doc->loadXML($xml);
$json = new \FluentDOM\Serializer\Json\RabbitFish($doc);
$object = json_decode($json);

echo "<pre>" . print_r( $object, true) . "</pre>";
echo "<script>console.log({$json})</script>";

编辑:替换

// PHP Deprecated: Non-static method DOMDocument::loadXML() should not be called statically
$doc = DOMDocument::loadXML($xml);

$doc = new DOMDocument();
$doc->loadXML($xml);

【讨论】:

  • 你试过代码了吗? new \FluentDOM\Serializer\Json\RabbitFish($doc) 返回一个 json 对象。
  • 是,但

    类型:错误

    消息:找不到类“FluentDOM\Serializer\Json\RabbitFish”

    文件名:/var/www /html/application/views/backend/add_veggies.php

    行号:153

  • 你必须在你的项目中包含 FluentDom。
【解决方案2】:

我在该链接上找到了解决方案,感谢大家的帮助 以这种方式使用 api 响应对我有很大帮助 How to convert SOAP response to PHP Array?

$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
$body = $xml->xpath('//sBody')[0];
$array = json_decode(json_encode((array)$body), TRUE);

这段代码完美地转换成 JSON

【讨论】:

    【解决方案3】:

    首先解析xml并将数据转换为数组:

    $xml=(array)simplexml_load_string($myXMLData);
    $json_output = $xml['GetCategoriesJsonResult'];
    

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多