171 votes

PHP convertir XML en JSON

Je suis en train de convertir xml en json en php. Si je fais un simple convertir à l'aide de xml simple et json_encode aucun des attributs dans le fichier xml du spectacle.

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

Donc, je suis en train d'analyser manuellement comme ceci.

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

et la sortie de l'état est - {"state":{"0":"Alabama"}} plutôt que d' {"state":"Alabama"}

Ce que je fais mal?

XML:

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

Sortie:

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

508voto

Antonio Max Points 1149

Json & Tableau de XML en 3 lignes:

$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

Ta da!

41voto

bakkelun Points 865

Désolé pour la réponse un vieux post, mais cet article présente une approche qui est relativement court, concis et facile à entretenir. Je l'ai testé moi-même et fonctionne plutôt 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;
    }
}
?>

37voto

Bryan H Points 475

J'ai pensé à elle. json_encode traite les objets différemment des chaînes. Je lance l'objet d'une chaîne de caractères et cela fonctionne maintenant.

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

4voto

alrusdi Points 286

Vous pouvez utiliser ce bien documenté de la bibliothèque à partir d'IBM http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=249609&filename=x-xml2json_php.zip&method=http

3voto

Husky Points 2221

J'ai utilisé Miles Johnson TypeConverter à cette fin. Il est installable à l'aide de Compositeur.

Vous pouvez écrire quelque chose comme ceci en utilisant:

<?php
require 'vendor/autoload.php';
use mjohnson\utility\TypeConverter;

$xml = file_get_contents("file.xml");
$arr = TypeConverter::xmlToArray($xml, TypeConverter::XML_GROUP);
echo json_encode($arr);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X