2014-02-25 131 views
0

我想使用groovy將xml編碼爲json ..我有以下代碼..但是從輸出{「note」:[{「to」:[「Tove」]},{ 「from」:[「Jani」]},{「heading」:[「Reminder」]}]}我想從輸出中刪除「[]」的東西,我如何刪除這些東西..代碼如下將XML轉換爲來自Groovy的json

def xml = '''<root> 
     | <node>Tim</node> 
     | <node>Tom</node> 
     | <node> 
     |  <anotherNode>another</anotherNode> 
     | </node> 
     |</root>'''.stripMargin() 

// Parse it 
def parsed = new XmlParser().parseText(xml) 

// Deal with each node: 
def handle 
handle = { node -> 
    if(node instanceof String) { 
     node 
    } 
    else { 
     [ (node.name()): node.collect(handle) ] 
    } 
} 
// Convert it to a Map containing a List of Maps 
def jsonObject = [ (parsed.name()): parsed.collect { node -> 
    [ (node.name()): node.collect(handle) ] 
} ] 

// And dump it as Json 
def json = new groovy.json.JsonBuilder(jsonObject) 

// Check it's what we expected 
assert json.toString() == '{"root":[{"node":["Tim"]},{"node":["Tom"]},{"node":   [{"anotherNode":["another"]}]}]}' 

回答

1

你可以寫一個函數返回一個對象(如果列表長度爲1),或者列表(如果它包含多個元素):

def crush = { list -> 
    list?.size() == 1 ? list[ 0 ] : list 
} 

然後換兩個你collect打電話給t他的方法:

[ (node.name()): crush(node.collect(handle)) ] 
+0

DEF的JSONObject = [(parsed.name()):粉碎(parsed.collect({節點 - > \t \t // [(node.name()):node.collect(處理)] \t \t [(node.name()):粉碎(node.collect(手柄))] \t \t}))] – user3282910

+0

我改變代碼,但它僅除去內 「[]」 S。但它沒有刪除外面的「[]」我怎麼能避免外面的「[]」s ..? – user3282910

+0

我想避免使用「{}」 – user3282910