2013-09-26 10 views
5

Eksperymentowałem z groovem Jsonbuilderem, jak widać poniżej, próbując spojrzeć na różne sposoby budowania obiektów i tablic JSON. Po tym, jak wszystko zaczęło mieć sens, spróbowałem rozszerzyć to, co pokazano poniżej. Mam pytanie, dlaczego "treść" pojawia się w wynikach json pretty string? Właściwie mam inny obiekt json wyświetlający informacje this.class w wynikach ciągów json.Wyjście JSON z Groovym

Wszelkie pomysły? Jestem nowy w tym, więc z pewnością może być oczywisty.

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 

}

Odpowiedz

9

Problemem mogą być przekształcone w ...

Dlaczego to:

import groovy.json.* 

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

druk:

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

i ten:

import groovy.json.* 

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

drukuje (?):

["test","test1"] 

Krótka odpowiedź jest taka, że ​​JsonBuilder ma człon o nazwie content, co stanowi ładunek. Kiedy jeden JsonBuilder absorbuje inny, chcemy zastąpić ładunek, a nie go zagnieździć. Linia ta jest sposobem na zastąpienie ładowność:

def js4 = new JsonBuilder (js3.content)

Ostatecznie Wynika to z faktu, że JsonBuilder.toString() (code here) wywołuje JsonOutput.toJson(object) (code here).

ćwiczenie dla czytelnika jest do eksperymentowania z:

class MyBuilder { 
    def content 
} 

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

To bardzo dobre wytłumaczenie. Możesz zaktualizować linki "kod tutaj" teraz, gdy przeniesiono źródła Groovy. –

+1

Doskonała odpowiedź, pomogła tona, dzięki –