Intereting Posts
Обслуживание файла через PHP-скрипт и безопасная замена этого файла на лету SimpleXML сохраняет возвращаемый контент на элементе CDATA PHP DOM – снятие тегов span, оставляя их содержимое Сопоставьте элемент с динамическим значением атрибута Code Igniter – лучшее место для объявления глобальной переменной Symfony2: Предотвращение дублирования в базе данных с формой от многих до одного Сброс соединения PHP при загрузке большого файла независимо от правильной настройки PHP move_uploaded_file () FAILS, и я не знаю, почему Лучший способ распознавания неиспользуемых переменных Как добавить параметры продукта на странице категории в opencart 2.0 Какие разрешения для скриптов / каталогов PHP? Как написать статью <<< TOC в PHP? Как извлечь весь текст перед символом «@» в строке PHP – удалить тег <img> из строки Как отправить запрос приложения всем пользователям с помощью диалогового окна запроса Facebook?

Есть ли способ конвертировать json в xml в PHP?

есть ли способ конвертировать json в xml в PHP? Я знаю, что xml to json очень возможен.

Если вы хотите использовать Сериализатор XML из PEAR, вы можете преобразовать JSON в объект PHP, а затем объект PHP в XML в два простых шага:

 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; } } в 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; } } 

Это зависит от того, как именно вы хотите, чтобы XML выглядел так. Я бы попробовал сочетание json_decode() и PEAR::XML_Serializer ( больше информации и примеров на сайте sitepoint.com ).

 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>'; 

(Непроверенный код – но вы поняли)

Crack откройте JSON с помощью json_decode и json_decode его, чтобы генерировать любой XML-файл.

В случае, если вам интересно, канонического сопоставления между JSON и XML нет, поэтому вам нужно написать код XML-генерации самостоятельно, исходя из потребностей вашего приложения.

Я объединил два предыдущих предложения:

 /** * 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; } } 

Возможно,

 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"); } 

Другим вариантом будет использование JSON-потокового анализатора .

Использование анализатора стримера пригодится, если вы хотите обойти граф промежуточных объектов, созданный PHP при использовании json_decode . Например, когда вы получили большой документ JSON и память, это проблема, вы можете напрямую выводить XML с помощью XMLWriter , читая документ с помощью потокового анализатора.

Например, 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; } 

Слушателю JSON2XML необходимо реализовать интерфейс Listener :

 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); } 

Во время выполнения слушатель получает различные события от анализатора, например, когда парсер находит объект, он отправляет данные в метод start_object() . Когда он найдет массив, он запустит start_array() и так далее. В этих методах вы должны делегировать значения соответствующим методам в XMLWriter , например start_element() и так далее.

Отказ от ответственности: я не связан с автором и не использовал инструмент раньше. Я выбрал эту библиотеку, потому что API выглядел достаточно просто, чтобы проиллюстрировать, как использовать парсер JSON на основе событий.