使用 PHP 将 XML 转换为 JSON,同时保留数组
我需要将 XML 文档转换为 JSON,以便轻松访问 JavaScript 中的数据。我目前正在使用此方法将 XML 转换为 JSON:
json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
但是,当一个元素仅包含 1 个子元素时,我遇到了问题。当使用 SimpleXML 解析时,它被视为对象而不是数组。我希望它们始终被视为数组,除非元素仅包含文本。
示例:
$xml = <<<END
<xml>
<TESTS>
<TEST>TEXT HERE</TEST>
</TESTS>
</xml>
END;
echo json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
此输出:
{"TESTS":{"TEST":"TEXT HERE"}}
如果我在 下添加另一个元素,则输出就是我想要的:
$xml = <<<END
<xml>
<TESTS>
<TEST>TEXT HERE</TEST>
<TEST>MORE TEXT HERE</TEST>
</TESTS>
</xml>
END;
echo json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
输出:
{"TESTS":{"TEST":["TEXT HERE","TEXT HERE"]}}
请注意元素如何包含在 JSON 数组而不是 JSON 对象内。有没有办法强制将元素解析为数组?
I need to convert an XML document into JSON, in order to easily access the data in JavaScript. I am currently using this method to convert the XML into JSON:
json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
However, I ran into a problem when an element only contains 1 child element. When it is parsed with SimpleXML, it is treated as an object instead of an array. I want them to always be treated as arrays, unless the element only contains text.
Example:
$xml = <<<END
<xml>
<TESTS>
<TEST>TEXT HERE</TEST>
</TESTS>
</xml>
END;
echo json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
This outputs:
{"TESTS":{"TEST":"TEXT HERE"}}
If I add another element under , then the output is how I want it:
$xml = <<<END
<xml>
<TESTS>
<TEST>TEXT HERE</TEST>
<TEST>MORE TEXT HERE</TEST>
</TESTS>
</xml>
END;
echo json_encode(new SimpleXMLElement($xml, LIBXML_NOCDATA));
Output:
{"TESTS":{"TEST":["TEXT HERE","TEXT HERE"]}}
Note how the elements are contained inside a JSON array instead of a JSON object. Is there a way to force elements to be parsed as arrays?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不得不处理同样的情况。这是问题的第一个快速解决方案 - 对于您的示例来说效果很好。
I had to deal with the same situation. Here is a quick first solution to the problem - works fine for your example.
真的,这很愚蠢,但你首先如果全部转换为对象,然后在数组中解码并转换为类似数组样式的 json ..))
Really this is lot a stupid but you first if all convert to object then decode in array and convert to json like array style.. ))