Bryan Hadlock Bryan Hadlock - 5 months ago 62
PHP Question

PHP convert XML to JSON

I am trying to convert xml to json in php. If I do a simple convert using simple xml and json_encode none of the attributes in the xml show.

$xml = simplexml_load_file("states.xml");
echo json_encode($xml);


So I am trying to manually parse it like this.

foreach($xml->children() as $state)
{
$states[]= array('state' => $state->name);
}
echo json_encode($states);


and the output for state is
{"state":{"0":"Alabama"}}
rather than
{"state":"Alabama"}


What am I doing wrong?

XML:

<?xml version="1.0" ?>
<states>
<state id="AL">
<name>Alabama</name>
</state>
<state id="AK">
<name>Alaska</name>
</state>
</states>


Output:

[{"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"
}
}
}

Answer

I figured it out. json_encode handles objects differently than strings. I cast the object to a string and it works now.

foreach($xml->children() as $state)
{
    $states[]= array('state' => (string)$state->name); 
}       
echo json_encode($states);