php - 从 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>
解决方案
要对其进行编码(并假设为 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"]}]
推荐阅读
- node.js - 尝试使用 bcrypt.compare 时出现错误“无法读取值为 null 的属性”
- android - 小吃店消失后,FAB 不会返回初始位置
- c++ - WxWidgets TextCtrl
- wso2 - WSO2 - Docusign 连接器
- javascript - 如何根据异步调用的持续时间设置 JS 变量
- javascript - 将两个对象合二为一,更新键
- javascript - JavaScript 查询参数返回空白而不是“+”
- android - Android TextView 是否支持 state_pressed 状态?
- json - Linux 上 JSON 文件的故障安全修改
- scala - 建模可选参数的最佳方法