我正在尝试在 php 中将 xml 转换为 json。如果我使用简单的 xml 和 json_encode 进行简单的转换,则 xml 中的任何属性都不会显示。
$xml = simplexml_load_file("states.xml"); echo json_encode($xml);
所以我试图像这样手动解析它。
foreach($xml->children() as $state) { $states[]= array('state' => $state->name); } echo json_encode($states);
并且状态的输出是{"state":{"0":"Alabama"}}而不是{"state":"Alabama"}
{"state":{"0":"Alabama"}}
{"state":"Alabama"}
我究竟做错了什么?
XML:
<?xml version="1.0" ?> <states> <state id="AL"> <name>Alabama</name> </state> <state id="AK"> <name>Alaska</name> </state> </states>
输出:
[{"state":{"0":"Alabama"}},{"state":{"0":"Alaska"}
变量转储:
object(SimpleXMLElement)#1 (1) { ["state"]=> array(2) { [0]=> object(SimpleXMLElement)#3 (2) { ["@attributes"]=> array(1) { ["id"]=> string(2) "AL" } ["name"]=> string(7) "Alabama" } [1]=> object(SimpleXMLElement)#2 (2) { ["@attributes"]=> array(1) { ["id"]=> string(2) "AK" } ["name"]=> string(6) "Alaska" } } }
我想到了。json_encode 处理对象的方式不同于字符串。我将对象转换为字符串,它现在可以工作了。
foreach($xml->children() as $state) { $states[]= array('state' => (string)$state->name); } echo json_encode($states);