PHP convierte XML a JSON

Resuelto Bryan Hadlock asked hace 54 años • 23 respuestas

Estoy intentando convertir xml a json en php. Si hago una conversión simple usando xml simple y json_encode, ninguno de los atributos en el xml se muestra.

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

Así que estoy intentando analizarlo manualmente de esta manera.

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

y la salida para el estado es {"state":{"0":"Alabama"}}en lugar de{"state":"Alabama"}

¿Qué estoy haciendo mal?

XML:

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

Producción:

[{"state":{"0":"Alabama"}},{"state":{"0":"Alaska"}

volcado de var:

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"
}
}
}
Bryan Hadlock avatar Jan 01 '70 08:01 Bryan Hadlock
Aceptado

Json y Array de XML en 3 líneas:

$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
Antonio Max avatar Oct 15 '2013 21:10 Antonio Max

Perdón por responder una publicación antigua, pero este artículo describe un enfoque relativamente breve, conciso y fácil de mantener. Lo probé yo mismo y funciona bastante bien.

http://lostechies.com/seanbiefeld/2011/10/21/simple-xml-to-json-with-php/

<?php   
class XmlToJson {
    public function Parse ($url) {
        $fileContents= file_get_contents($url);
        $fileContents = str_replace(array("\n", "\r", "\t"), '', $fileContents);
        $fileContents = trim(str_replace('"', "'", $fileContents));
        $simpleXml = simplexml_load_string($fileContents);
        $json = json_encode($simpleXml);

        return $json;
    }
}
?>
Coreus avatar Mar 11 '2013 09:03 Coreus

Me lo imaginé. json_encode maneja objetos de manera diferente a las cadenas. Lanzo el objeto a una cuerda y ahora funciona.

foreach($xml->children() as $state)
{
    $states[]= array('state' => (string)$state->name); 
}       
echo json_encode($states);
Bryan Hadlock avatar Jan 13 '2012 03:01 Bryan Hadlock