XML naar JSON converteren in PHP


Beste antwoord

Je kunt het doen met behulp van enkele ingebouwde functies als je een fan bent van core php. Doe het gewoon zoals hieronder:

$xmlObject = simplexml\_load\_string($xmlString);

$jsonString = json\_encode($xmlObject);

$jsonObject = json\_decode($jsonString);

Laten we een leuke manier vinden om dit te doen. Zullen we.

Ten eerste hebben we een klasse nodig om XML naar JSON te converteren.

class XmlToJson{

private $xmlObject;

public function getXmlObject(){

return $this->xmlObject;

}

// It"s basic constructor. Just getting the XML object

// If we have XML Object then we can just create new

// Object with XML Object as parameter.

public function \_\_construct($xmlObject = null){

$this->xmlObject = $xmlObject;

}

// Read from XML file and create Object from the contents.

public static function fromFile($filepath){

if(!file\_exists($filepath){

throw new Exception("File not found");

}

$xmlString = file\_get\_contents($filepath);

if($xmlString === false){

throw new Exception("Could not read the file");

}

return self::fromString($xmlString);

}

// Get XML String and create new Object from the string.

public static function fromString($xmlString){

if($xmlObject === false){

throw new Exception("Could not convert to XML Object");

}

return new XmlToJson($xmlObject);

}

// Get Json Object from the XML Object we have

public function getJson(){

$jsonString = json\_encode($this->xmlObject);

return json\_decode($jsonString);

}

}

Ik heb de code niet getest. Het gedraagt ​​zich misschien niet zoals ik bedoelde. Maar het is het proberen waard. Meestal zit het probleem in de manier waarop PHP objecten en strings uit XML behandelt. Ik hoop echter dat het werkt! U kunt de bovenstaande klasse gebruiken zoals hieronder vermeld:

$student = XmlToJson::fromFile("/var/www/uploads/student.xml")->toJson();

Of u kunt een composer-pakket krijgen en het zonder zorgen implementeren, zoals het zou zijn getest.

markwilson / xml-to-json

Antwoord

Om het JSON-bestandsformaat af te handelen, biedt Python een module met de naam JSON.

STAP 1: installeer xmltodict-module met pip of een andere Python-pakketbeheerder

pip install xmltodict

STAP 2: importeer json-module met behulp van het trefwoord import

import json

STAP 3: Lees het xml-bestand hier, “data\_dict” is de variabele waarin we onze XML-gegevens hebben geladen nadat we deze hebben geconverteerd naar woordenboek datatype.

with open("xml\_file.xml") as xml\_file:

data\_dict = xmltodict.parse(xml\_file.read())

STAP 4: sluit het XML-bestand

xml\_file.close()

STAP 5: Converteer de xml\_data naar een woordenboek en sla het op in een variabel JSON-object zijn omgeven door accolades {}. Ze zijn geschreven in sleutel- en waardeparen. json.loads () neemt een string op en retourneert een json-object. json.dumps () neemt een json-object in en retourneert een tekenreeks. We gebruiken xml\_data als invoertekenreeks en genereren pyhon-object, dus we gebruiken json.dumps ()

json\_data = json.dumps(data\_dict)

Hier is json\_data de variabele die wordt gebruikt om het gegenereerde object op te slaan.

STAP 6: Schrijf de json\_data naar het uitvoerbestand

with open("data.json", "w") as json\_file:

json\_file.write(json\_data)

STAP 7: Sluit het uitvoerbestand

json\_file.close()

Voorbeeld:

XML-bestand:

# Program to convert an xml

# file to json file

# import json module and xmltodict

# module provided by python

import json

import xmltodict

# open the input xml file and read

# data in form of python dictionary

# using xmltodict module

with open("test.xml") as xml\_file:

data\_dict = xmltodict.parse(xml\_file.read())

xml\_file.close()

# generate the object using json.dumps()

# corresponding to json data

json\_data = json.dumps(data\_dict)

# Write the json data to output

# json file

with open("data.json", "w") as json\_file:

json\_file.write(json\_data)

json\_file.close()

Uitvoer:

Voor het leren van spannende nieuwe dingen kun je het bekijken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *