2009-05-13 14 views
40

क्या पीएसपी में जेसन को एक्सएमएल में परिवर्तित करने का कोई तरीका है? मुझे पता है कि जेएसएल से जेसन बहुत संभव है।क्या पीएसपी में जेसन को एक्सएमएल में परिवर्तित करने का कोई तरीका है?

+0

और इससे भी महत्वपूर्ण: आप कभी ऐसा क्यों करना चाहते हैं? – NikiC

+1

'$ xml =" ";' (मूर्खतापूर्ण प्रश्न पूछें ...) – salathe

+0

ज़ेंड फ्रेमवर्क का एक बहुत अच्छा काम है [घटक] (http://framework.zend.com /manual/en/zend.json.xml2json.html) इसके लिए। – markus

उत्तर

11

यह इस बात पर निर्भर करता है कि आप वास्तव में एक्सएमएल को कैसा दिखाना चाहते हैं। मैं json_decode() और PEAR::XML_Serializer (more info and examples on 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>'; 

(Untested कोड - लेकिन आप अंदाजा हो)

+0

एएके, या मुझे आधे मिनट तक हराया।मैं वैसे भी अपना छोड़ दूंगा - यह थोड़ा अलग दृष्टिकोण है। –

25

आप XML Serializer नाशपाती से उपयोग करने के लिए तैयार हैं, तो आप JSON एक PHP वस्तु के लिए PHP वस्तु एक्सएमएल करने के लिए परिवर्तित कर सकते हैं और उसके बाद दो आसान चरणों:

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

क्रैक json_decode साथ JSON खोलें, और यह पार जो कुछ भी एक्सएमएल आप चाहते हैं उत्पन्न करने के लिए।

यदि आप सोच रहे हैं, तो JSON और XML के बीच कोई कैनोलिक मैपिंग नहीं है, इसलिए आपको अपने एप्लिकेशन की ज़रूरतों के आधार पर एक्सएमएल-पीढ़ी कोड स्वयं लिखना होगा।

5

मैं में दो पहले सुझाव संयुक्त:

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

मेरे लिए बिल्कुल सही चीयर्स – wired00

4

एक देशी 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"); 
} 
+0

अच्छी लिपि, धन्यवाद। – Zsolti

1

एक JSON streaming parser उपयोग करने के लिए एक अन्य विकल्प होगा हो सकता है।

एक स्ट्रीमर पार्सर का उपयोग करना आसान होगा यदि आप json_decode का उपयोग करते समय PHP द्वारा बनाए गए इंटरमीडिएट ऑब्जेक्ट ग्राफ़ को बाईपास करना चाहते हैं। उदाहरण के लिए, जब आपको एक बड़ा 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 लागू करने के लिए की आवश्यकता होगी:

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() और इसी तरह से।

अस्वीकरण: मैं लेखक से संबद्ध नहीं हूं, और न ही मैंने पहले टूल का उपयोग किया है। मैंने इस लाइब्रेरी को चुना क्योंकि एपीआई ने इवेंट आधारित JSON पार्सर का उपयोग करने के तरीके को स्पष्ट करने के लिए पर्याप्त सरल देखा।

संबंधित मुद्दे

 संबंधित मुद्दे