Server : Apache System : Linux indy02.toastserver.com 3.10.0-962.3.2.lve1.5.85.el7.x86_64 #1 SMP Thu Apr 18 15:18:36 UTC 2024 x86_64 User : palandch ( 1163) PHP Version : 7.1.33 Disable Function : NONE Directory : /home/palandch/www/core/model/aws/utilities/ |
<?php /* * Copyright 2010-2011 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ /*%******************************************************************************************%*/ // CLASS /** * Handles the conversion of data from JSON to other formats. * * @version 2011.03.25 * @license See the included NOTICE.md file for more information. * @copyright See the included NOTICE.md file for more information. * @link http://aws.amazon.com/php/ PHP Developer Center */ class CFJSON { /** * Converts a JSON string to a CFSimpleXML object. * * @param string|array $json (Required) Pass either a valid JSON-formatted string, or an associative array. * @param SimpleXMLElement $xml (Optional) An XML object to add nodes to. Must be an object that is an <code>instanceof</code> a <code>SimpleXMLElement</code> object. If an object is not passed, a new one will be generated using the classname defined for <code>$parser</code>. * @param string $parser (Optional) The name of the class to use to parse the XML. This class should extend <code>SimpleXMLElement</code>. Has a default value of <code>CFSimpleXML</code>. * @return CFSimpleXML An XML representation of the data. */ public static function to_xml($json, SimpleXMLElement $xml = null, $parser = 'CFSimpleXML') { // If there isn't an XML object, create one if (!$xml) { $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8"?><rootElement/>', $parser); } // If we haven't parsed the JSON, do it if (!is_array($json)) { $json = json_decode($json, true); if (function_exists('json_last_error')) { // Did we encounter an error? switch (json_last_error()) { case JSON_ERROR_DEPTH: throw new JSON_Exception('Maximum stack depth exceeded.'); case JSON_ERROR_CTRL_CHAR: throw new JSON_Exception('Unexpected control character found.'); case JSON_ERROR_SYNTAX: throw new JSON_Exception('Syntax error; Malformed JSON.'); case JSON_ERROR_STATE_MISMATCH: throw new JSON_Exception('Invalid or malformed JSON.'); } } else { throw new JSON_Exception('Unknown JSON error. Be sure to validate your JSON and read the notes on http://php.net/json_decode.'); } } // Hand off for the recursive work self::process_json($json, $xml, $parser); return $xml; } /** * Converts a JSON string to a CFSimpleXML object. * * @param string|array $json (Required) Pass either a valid JSON-formatted string, or an associative array. * @param SimpleXMLElement $xml (Optional) An XML object to add nodes to. Must be an object that is an <code>instanceof</code> a <code>SimpleXMLElement</code> object. If an object is not passed, a new one will be generated using the classname defined for <code>$parser</code>. * @param string $parser (Optional) The name of the class to use to parse the XML. This class should extend <code>SimpleXMLElement</code>. Has a default value of <code>CFSimpleXML</code>. * @return CFSimpleXML An XML representation of the data. */ protected static function process_json($json, SimpleXMLElement $xml = null, $parser = 'CFSimpleXML') { foreach ($json as $k => $v) { if (is_array($v)) { $node = $xml->addChild($k); self::process_json($v, $node, $parser); } else { $xml->addChild($k, $v); } } } } /** * Default JSON Exception. */ class JSON_Exception extends Exception {}