2013-09-26 51 views
5

我一直在嘗試的時髦Jsonbuilder你可以看到下面想看看不同的方式來構建JSON對象和數組。事情開始有意義之後,我嘗試擴展到下面所示的內容。我已經是一個問題,爲什麼沒有「內容」顯示在JSON字符串漂亮輸出?其實,我在顯示JSON字符串輸出this.class信息的另一個JSON對象。JSON輸出使用Groovy

任何想法?我對此很陌生,所以它肯定是一個明顯的例子。

def tt = ["test", "test1"] 
       def jjj = "jason" 
       def js3 = new groovy.json.JsonBuilder() 
       def js2 = new groovy.json.JsonBuilder(tt); 
       js3 hello: "$jjj", "$jjj": tt 
       def js4 = new groovy.json.JsonBuilder() 
       def result = js4([sdn: js3, openflow: js2, type: 3]) 
       println js4.toPrettyString(); 


{ 
"sdn": { 
    "content": { 
     "hello": "jason", 
     "jason": [ 
      "test", 
      "test1" 
     ] 
    } 
}, 
"openflow": { 
    "content": [ 
     "test", 
     "test1" 
    ] 
}, 
"type": 3 

}

回答

9

問題可以被重申爲...

爲什麼這樣的:

import groovy.json.* 

def js3 = new JsonBuilder(["test", "test1"]) 
def js4 = new JsonBuilder(js3) 
println js4.toString() 

打印:

{"content":["test","test1"]} 

這:

import groovy.json.* 

def js3 = new JsonBuilder(["test", "test1"]) 
def js4 = new JsonBuilder(js3.content) 
println js4.toString() 

打印這個(?):

["test","test1"] 

簡短的回答是JsonBuilder具有名爲content構件,其表示有效載荷。當一個JsonBuilder吸收另一方面,我們要替換的有效載荷,而不是窩了。這條線是更換有效載荷的方式:

高清JS4 =新JsonBuilder(js3.content)

最終,這從一個事實,即JsonBuilder.toString()code here)調用JsonOutput.toJson(object)code here)莖。

的讀者做練習是試驗:

class MyBuilder { 
    def content 
} 

def myB = new MyBuilder(content: ["test", "test1"]) 
println JsonOutput.toJson(myB) 
println JsonOutput.toJson(myB.content) 
+0

這是一個很好的解釋。您可能會想「這裏代碼」更新鏈接現在Groovy的來源已經轉移。 –

+1

出色答卷,幫助一噸,謝謝 –