gibt es eine Möglichkeit, json in PHP in xml zu konvertieren? Ich weiß, dass xml zu json sehr viel möglich ist.Gibt es eine Möglichkeit, json in PHP in xml zu konvertieren?
Antwort
Es hängt davon ab, wie genau Sie wollen, dass XML aussieht. Ich würde versuchen eine Kombination von json_decode()
und PEAR::XML_Serializer
().
require_once 'XML/Serializer.php';
$data = json_decode($json, true)
// An array of serializer options
$serializer_options = array (
'addDecl' => TRUE,
'encoding' => 'ISO-8859-1',
'indent' => ' ',
'rootName' => 'json',
'mode' => 'simplexml'
);
$Serializer = &new XML_Serializer($serializer_options);
$status = $Serializer->serialize($data);
if (PEAR::isError($status)) die($status->getMessage());
echo '<pre>';
echo htmlspecialchars($Serializer->getSerializedData());
echo '</pre>';
(Ungeprüfte Code - aber Sie erhalten die Idee)
Ack, du schlägst mich um eine halbe Minute.Ich werde sowieso meine verlassen - es ist ein etwas anderer Ansatz. –
Wenn Sie bereit sind, die XML Serializer von PEAR zu verwenden, können Sie die JSON an ein PHP-Objekt zu konvertieren und dann die PHP-Objekt in XML in zwei einfache Schritte:
include("XML/Serializer.php");
function json_to_xml($json) {
$serializer = new XML_Serializer();
$obj = json_decode($json);
if ($serializer->serialize($obj)) {
return $serializer->getSerializedData();
}
else {
return null;
}
}
Risse öffnen Sie die JSON mit json_decode
und durchqueren sie, was auch immer Sie wollen XML zu generieren.
Falls Sie sich wundern, gibt es keine kanonische Zuordnung zwischen JSON und XML, daher müssen Sie den XML-Generierungscode basierend auf den Anforderungen Ihrer Anwendung selbst schreiben.
I kombiniert die beiden früheren Vorschläge in:
/**
* Convert JSON to XML
* @param string - json
* @return string - XML
*/
function json_to_xml($json)
{
include_once("XML/Serializer.php");
$options = array (
'addDecl' => TRUE,
'encoding' => 'UTF-8',
'indent' => ' ',
'rootName' => 'json',
'mode' => 'simplexml'
);
$serializer = new XML_Serializer($options);
$obj = json_decode($json);
if ($serializer->serialize($obj)) {
return $serializer->getSerializedData();
} else {
return null;
}
}
Perfekt für mich Prost – wired00
Eine native approch
function json_to_xml($obj){
$str = "";
if(is_null($obj))
return "<null/>";
elseif(is_array($obj)) {
//a list is a hash with 'simple' incremental keys
$is_list = array_keys($obj) == array_keys(array_values($obj));
if(!$is_list) {
$str.= "<hash>";
foreach($obj as $k=>$v)
$str.="<item key=\"$k\">".json_to_xml($v)."</item>".CRLF;
$str .= "</hash>";
} else {
$str.= "<list>";
foreach($obj as $v)
$str.="<item>".json_to_xml($v)."</item>".CRLF;
$str .= "</list>";
}
return $str;
} elseif(is_string($obj)) {
return htmlspecialchars($obj) != $obj ? "<![CDATA[$obj]]>" : $obj;
} elseif(is_scalar($obj))
return $obj;
else
throw new Exception("Unsupported type $obj");
}
Schönes Skript, danke. – Zsolti
Eine weitere Möglichkeit, eine JSON streaming parser zu verwenden wäre sein könnte.
Die Verwendung eines Streamer-Parsers ist praktisch, wenn Sie das von PHP erstellte Zwischenobjektdiagramm umgehen möchten, wenn Sie json_decode
verwenden. Zum Beispiel, wenn Sie ein großes JSON-Dokument und Speicher ist ein Problem, können Sie die XML mit XMLWriter
direkt beim Lesen des Dokuments mit dem Streaming-Parser ausgeben.
Ein Beispiel wäre https://github.com/salsify/jsonstreamingparser
$writer = new XMLWriter;
$xml->openURI('file.xml');
$listener = new JSON2XML($writer); // you need to write the JSON2XML listener
$stream = fopen('doc.json', 'r');
try {
$parser = new JsonStreamingParser_Parser($stream, $listener);
$parser->parse();
} catch (Exception $e) {
fclose($stream);
throw $e;
}
Der JSON2XML Zuhörer würde die Listener interface implementieren müssen:
interface JsonStreamingParser_Listener
{
public function start_document();
public function end_document();
public function start_object();
public function end_object();
public function start_array();
public function end_array();
public function key($key);
public function value($value);
}
Zur Laufzeit wird der Hörer die verschiedenen Ereignisse aus dem Parser empfangen, z.B. Wenn der Parser ein Objekt findet, sendet er die Daten an die Methode start_object()
. Wenn es ein Array findet, löst es start_array()
und so weiter aus. In diesen Methoden würden Sie dann die Werte an die entsprechenden Methoden in der XMLWriter
, z. start_element()
und so weiter.
Haftungsausschluss: Ich bin nicht mit dem Autor verbunden, noch habe ich das Tool zuvor verwendet. Ich wählte diese Bibliothek aus, weil die API ausreichend einfach aussah, um zu veranschaulichen, wie ein ereignisbasierter JSON-Parser verwendet wird.
- 1. Gibt es eine Möglichkeit, ein Array in Klasseneigenschaften zu konvertieren?
- 2. Gibt es eine Möglichkeit, ein JSON-Schema in eine XSD zu konvertieren?
- 3. Gibt es eine Möglichkeit, in URL Yii2 "+" in "-" zu konvertieren?
- 4. Gibt es eine einfache Möglichkeit, Kriterien in HQL zu konvertieren?
- 5. Gibt es eine kostenlose Möglichkeit, RTF in PDF zu konvertieren?
- 6. Gibt es eine Möglichkeit, Funktionstyp in Haskell zu konvertieren?
- 7. Gibt es in Node.js eine Möglichkeit, WCF-Binärdaten in Volltext-XML-Darstellung zu konvertieren?
- 8. gibt es eine einfache Möglichkeit, mein XML-Objekt zurück in String in Java zu konvertieren?
- 9. Gibt es in PHP eine Möglichkeit, Zahlen in ihre geschriebene Version zu konvertieren?
- 10. gibt es eine Möglichkeit, die Formulardaten in PHP zu löschen?
- 11. gibt es eine Möglichkeit, die Videolänge in PHP zu bekommen?
- 12. Gibt es eine Möglichkeit, die Parserzeit in PHP zu messen?
- 13. Gibt es eine bessere Möglichkeit, dies in PHP zu tun
- 14. Gibt es eine einfache Möglichkeit, C# -Klassen in PHP zu konvertieren?
- 15. Gibt es eine Möglichkeit, Json von einer Subdomain zu laden?
- 16. gibt es eine bessere Möglichkeit, Youtube PHP API zu verwenden
- 17. Konvertieren von JSON zu XML in Java
- 18. Gibt es eine Möglichkeit, die XML-Warnungen zu deaktivieren?
- 19. Gibt es eine sichere Möglichkeit, eine Sammlung in eine Sequenz in F # zu konvertieren?
- 20. Gibt es eine Möglichkeit, einen Standardeigenschaftswert in Spring XML anzugeben?
- 21. PHP konvertieren Array in JSON
- 22. Gibt es eine Möglichkeit, JSON mit Java zu parsen?
- 23. Konvertieren von JSON in XML
- 24. JSON in XML konvertieren und XML speichern
- 25. xml in json android konvertieren
- 26. Gibt es eine vorgefertigte Möglichkeit, JSON von VB6 zu parsen?
- 27. Gibt es eine Möglichkeit, meine Konsolenanwendung in eine Windows Forms-Anwendung in C# zu konvertieren?
- 28. Gibt es eine Möglichkeit, SqlBulkCopy zu verwenden, ohne die Daten in eine DataTable zu konvertieren?
- 29. Gibt es eine Möglichkeit zu verhindern, Asciidoc eine Datei Linke in einen tatsächlichen Link zu konvertieren?
- 30. JSON-LD - eine Möglichkeit, es zu verknüpfen?
Und noch wichtiger: Warum sollten Sie das jemals tun wollen? – NikiC
'$ xml =" ";' (Stellen Sie eine dumme Frage ...) –
salathe
Das Zend Framework hat eine sehr gut funktionierende [Komponente] (http://framework.zend.com /manual/en/zend.json.xml2json.html) dafür. – markus