%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/gnufm.varak.net/api/ |
Current File : //data/www_bck/varak.net_bck/gnufm.varak.net/api/JSONEncoder.php |
<?php /* GNU FM -- a free network service for sharing your music listening habits Copyright (C) 2009 Free Software Foundation, Inc This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ class JSONEncoder { /** * Encode a SimpleXML object in JSON format matching Last.fm's output * * @param $xml - A SimpleXMLElement * @return A JSON formatted string */ public static function encodeXML($xml) { if ($xml->getName() == 'lfm' && count($xml->children())) { $xml = $xml->children(); } $json_data[$xml->getName()] = JSONEncoder::recursivelyEncodeXML($xml); return json_encode($json_data); } public static function recursivelyEncodeXML($xml) { $json_data = array(); if (count($xml->children())) { foreach ($xml->children() as $child) { if (array_key_exists($child->getName(), $json_data)) { if (!array_key_exists(0, $json_data[$child->getName()])) { $a = array(); $a[] = $json_data[$child->getName()]; $json_data[$child->getName()] = $a; } $json_data[$child->getName()][] = JSONEncoder::recursivelyEncodeXML($child); } else { $json_data[$child->getName()] = JSONEncoder::recursivelyEncodeXML($child); } } if (count($xml->attributes())) { $json_data['@attr'] = array(); foreach ($xml->attributes() as $k => $v) { $json_data['@attr'][$k] = (string) $v; } } } else { // Leaf node if (count($xml->attributes())) { $json_data['#text'] = (string) $xml; foreach ($xml->attributes() as $k => $v) { $json_data[$k] = (string) $v; } } else { $json_data = (string) $xml; } } return $json_data; } }