2009-10-07 3 views
3

У меня есть один файл json, но приложение, в котором я использую данные импорта только из xml-файлов. Так кто-нибудь знает инструмент, который преобразует json-файлы в xml? Я искал такой инструмент в течение нескольких часов и мог найти только инструменты, которые создают json-файлы из xml.Инструмент Json to XML?

Спасибо!

+1

Очевидно, что проблема с JSON-> Преобразование XML в JSON не различает атрибуты, ценности и подэлементы, так что от одного к одному. –

+0

См. Этот вопрос для XSLT-конвертера (довольно круто): http://stackoverflow.com/questions/559296/java-implementation-of-json-to-xml-conversion – svens

ответ

0

Если вы используете .NET Framework, вы можете сделать это в коде:

  • Создать читатель JSON над содержимым JSON с помощью класса JsonReaderWriterFactory
  • Создать регулярный XmlWriter и вызовите WriteNode на котором он читал JSON. Он будет выписывать XML, соответствующий вашему JSON.

Предостережение:

  • Это будет использовать Microsoft-запатентованное отображение JSON-к-XML (есть не стандартная один). XML будет выглядеть странно.
  • Были некоторые серьезные ошибки, блокирующие этот сценарий в .NET3.5. Может быть исправлены в .NET 3.5 SP1, может быть исправлен в версии 4.0, закрепленных точно в Silverlight 3
0

чистой реализации XSLT 2.0:

Посмотрите на f:json-document() от FXSL 2.x library.

Используя эту функцию, очень легко включить JSon и использовать ее так же, как ... XML.

Например, можно просто написать следующее выражение XPath:

f:json-document($vstrParam)/Students/*[sex = 'Female'] 

и получить все дети Students с sex = 'Female'

Вот полный пример:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:f="http://fxsl.sf.net/" 
exclude-result-prefixes="f xs" 
> 
<xsl:import href="../f/func-json-document.xsl"/> 

<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="vstrParam" as="xs:string"> 
{ 

    "teacher":{ 
    "name": 
     "Mr Borat", 
    "age": 
     "35", 
    "Nationality": 
     "Kazakhstan" 
      }, 


    "Class":{ 
    "Semester": 
     "Summer", 
    "Room": 
     null, 
    "Subject": 
     "Politics", 
    "Notes": 
     "We're happy, you happy?" 
      }, 

    "Students": 
    { 
     "Smith": 
     {"First Name":"Mary","sex":"Female"}, 
     "Brown": 
     {"First Name":"John","sex":"Male"}, 
     "Jackson": 
     {"First Name":"Jackie","sex":"Female"} 
    } 
    , 


    "Grades": 

    { 
     "Test": 
     [ 
     {"grade":"A","points":68,"grade":"B","points":25,"grade":"C","points":15}, 

     {"grade":"C","points":2, "grade":"B","points":29, "grade":"A","points":55}, 

     {"grade":"C","points":2, "grade":"A","points":72, "grade":"A","points":65} 
     ] 
    } 


} 
</xsl:variable> 

<xsl:template match="/"> 
    <xsl:sequence select= 
    "f:json-document($vstrParam)/Students/*[sex = 'Female']"/> 

</xsl:template> 
</xsl:stylesheet> 

Когда выше преобразование применяется на любой документ XML (игнорируется), правильный результат получается:

<Smith> 
    <First_Name>Mary</First_Name> 
    <sex>Female</sex> 
</Smith> 
<Jackson> 
    <First_Name>Jackie</First_Name> 
    <sex>Female</sex> 
</Jackson>