2013-09-26 3 views
5

JSON nesnelerini ve dizilerini oluşturmak için farklı yollar aramaya çalışırken aşağıda görebileceğiniz gibi groovy Jsonbuilder ile denemeler yapıyorum. İşler mantıklı başladıktan sonra, aşağıda gösterilenlere genişlemeye çalıştım. Sahip olduğum soru, "içerik" in neden json pretty string çıktısında gösteriliyor? Aslında json string çıkışlarında this.class bilgisini gösteren başka bir json nesnesi var.Groovy ile JSON çıktısı

Herhangi bir fikrin var mı? Bu konuda yeniyim, bu yüzden kesinlikle bariz bir tanesi olabilir.

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 

}

cevap

9

sorun olarak yeniden ifade edilebilirler ...

neden yapar:

import groovy.json.* 

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

baskı:

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

ve bu:

import groovy.json.* 

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

baskılar, bu (?):

["test","test1"] 

kısa cevap JsonBuilder yükünü temsil content adlı bir elemanı, sahip olmasıdır. Bir JsonBuilder diğerini emdiğinde, yükü değiştirmek ve onu yerleştirmek istemiyoruz.

def js4 = Yeni JsonBuilder (js3.content)

Sonuçta, bu JsonBuilder.toString() (code here) JsonOutput.toJson(object) (code here) çağırır olmasından kaynaklanmaktadır: Bu hat yükü değiştirmek için bir yoldur. Bu çok iyi bir açıklama bu

class MyBuilder { 
    def content 
} 

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

:

okuyucu için bir egzersiz ile denemektir. Groovy kaynaklarının taşındığını şimdi "kod burada" linkleri güncellemek isteyebilirsiniz. –

+1

Mükemmel cevap, bir ton yardımcı oldu, teşekkürler –