2015-04-29 158 views
1

我有一個JSON文件,在這個JSON文件轉換成XML格式使用的解析器,然後寫回XML文件使用groovy將JSON轉換爲XML?

我無法找到如何做到這一點在Groovy

如果有任何實例我已經JSON看起來像這樣:

{ 
name: "sampleConfiguration", 
description: "SampleDesc" 
version: "1.0", 
parameters: [ 
    { 
     name: "sampleParameter", 
     description: "parameter description", 
     value: "20", 
     enabled: "1" 
    }, 
    { 
     name: "items", 
     description: "parameter with subparameters", 
     value:[ 
      { 
       name: "item", 
       description: "nested parameter", 
       value: "13" 
      }, 
      { 
       name: "item", 
       description: "nested parameter 2", 
       value: "TEST" 
      } 
     ] 
    } 
]} 

然後,我應該把它轉換成XML看起來像這樣:

<?xml version="1.0"?> 
<sampleConfiguration version="1.0" description="SampleDesc"> 
<params> 
    <sampleParameter enabled="1" description="parameter description">20</sampleParameter> 
    <items description="parameter with subparameters"> 
     <item description="nested parameter">13</item> 
     <item description="nested parameter 2">TEST</item> 
    </items> 
</params> 
</sampleConfiguration> 

我一直在尋找JSON到XML轉換代碼

+3

請提供一個例子,你的(甚至是失敗的)嘗試。 – Opal

+0

我已經更新了代碼。 - 感謝@Opal –

+0

看起來它不能很高度自動化。 – Opal

回答

5

如果你讓你的JSON有效("輪的名字,並在初始塊逗號),你可以做到這一點,將其轉換(特別製作的這個例子)

def json = ''' 
{ 
    "name": "sampleConfiguration", 
    "description": "SampleDesc", 
    "version": "1.0", 
    "parameters": [ 
    { 
     "name": "sampleParameter", 
     "description": "parameter description", 
     "value": "20", 
     "enabled": "1" 
    }, 
    { 
     "name": "items", 
     "description": "parameter with subparameters", 
     "value":[ 
      { 
       "name": "item", 
       "description": "nested parameter", 
       "value": "13" 
      }, 
      { 
       "name": "item", 
       "description": "nested parameter 2", 
       "value": "TEST" 
      } 
     ] 
    } 
]}''' 

import groovy.json.* 
import groovy.xml.* 

def xml = new JsonSlurper().parseText(json).with { j -> 
    new StringWriter().with { sw -> 
     new MarkupBuilder(sw)."$name"(version: version, description:description) { 
      params { 
       parameters.each { p -> 
        if(p.value instanceof List) { 
         "$p.name"(description:p.description) { 
          p.value.each { v -> 
           "$v.name"(description: v.description, v.value) 
          } 
         } 
        } 
        else { 
         "$p.name"(description:p.description, p.value) 
        } 
       } 
      } 
     } 
     sw.toString() 
    } 
} 

println xml 

我知道沒有將xml轉換成json的一般情況。

從這個例子的輸出是:

<sampleConfiguration version='1.0' description='SampleDesc'> 
    <params> 
    <sampleParameter description='parameter description'>20</sampleParameter> 
    <items description='parameter with subparameters'> 
     <item description='nested parameter'>13</item> 
     <item description='nested parameter 2'>TEST</item> 
    </items> 
    </params> 
</sampleConfiguration> 
+0

它的工作正常,謝謝@tim_yates。 –

+0

喜歡它濃縮。 – Rao