首页 > 解决方案 > 从 Parsed XML PHP 创建 JSON 响应

问题描述

我正在解析 eBay API 响应。我想把它传递给一个更干净、更容易用 JavaScript 解析的网站。我成功地解析了 XML ......但现在将其转换为 JSON 重新发送回客户端让我有些头疼。

注意$resp是 eBay 的回复。使用下面的代码成功解析的是它们的全长 XML。

例如...$valueName可能是Grade. 然后我进入下一个 foreach 循环并获取它的值。这些values可能是10, 9.5, 9

这是我的PHP代码。

$arrayName = array();
$arrayValue = array();

foreach($resp->aspectHistogramContainer->aspect as $name) {
    $nameAspect = $name['name'];
    //$arrayName["aspectName"] = $nameAspect;

    foreach($name->valueHistogram as $value) {
        $valueAspect = $value['valueName'];
        //$arrayValue["aspectValue"] = $valueAspect;    
    }

    //array_push($arrayName, $arrayValue);
}
echo json_encode($arrayName);

因此,无需我尝试创建自己的 JSON,我就能得到我需要的东西。我回显结果,它与此类似...

姓名

- - - 价值

- - - 价值

- - - 价值

姓名

- - - 价值

姓名

等等等等

对于 JSON 响应...我正在寻找类似...

[
  {
        "name": "NAME",
        "value": ["value", "value"]
    }, {
        "name": "name",
        "value": ["value", "value"]
    }
]

任何帮助和指导将不胜感激。

eBay 的回复是这样的(还有 A LOT more <aspect>and <valueHistogram>

<getHistogramsResponse xmlns="http://www.ebay.com/marketplace/search/v1/services">
<ack>Success</ack>
<version>1.13.0</version>
<timestamp>2018-11-07T15:32:20.380Z</timestamp>
<aspectHistogramContainer>
<domainDisplayName>Baseball Cards</domainDisplayName>
<aspect name="Card Manufacturer">
<valueHistogram valueName="Ace Authentic">
<count>19</count>
</valueHistogram>
<valueHistogram valueName="American Caramel">
<count>2024</count>
</valueHistogram>
<valueHistogram valueName="APBA">
<count>10554</count>
</valueHistogram>
<valueHistogram valueName="Bazooka">
<count>8826</count>
</valueHistogram>
<valueHistogram valueName="Be A Player">
<count>17</count>
</valueHistogram>
<valueHistogram valueName="Bell Brand Dodgers">
<count>334</count>

标签: phpjsonxml

解决方案


要对其进行编码(并假设为 SimpleXML),只需构建每个内部$aspect数据数组,然后将值添加到其中即可。我(string)用来确保数据不存储为 SimpleXMLElement,这可能会导致副作用......

$arrayName = array();

foreach($resp->aspectHistogramContainer->aspect as $name) {
    $aspect = [ "name" => (string)$name['name']];

    foreach($name->valueHistogram as $value) {
        $aspect["value"][] = (string)$value['valueName'];
    }
    $arrayName[] = $aspect;
}
echo json_encode($arrayName);

使用示例 XML,这给出了...

[{"name":"Card Manufacturer","value":["Ace Authentic","American Caramel","APBA","Bazooka","Be A Player","Bell Brand Dodgers"]}]

推荐阅读