我正在尝试将xml中的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"}
var dump:
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);