2016-10-07 3 views
1

Ich muss einen JSON-String in meinem Groovy-Skript erstellen, der einige Elemente enthält, die Array sind, und einige, die nicht Array sind. Zum Beispiel unter den ..JSON mit Array- und Nicht-Array-Daten mit Groovy JsonBuilder

{ 
"fleet": { 
    "admiral":"Preston", 
    "cruisers": [ 
     {"shipName":"Enterprise"}, 
     {"shipName":"Reliant"} 
    ] 
    } 
} 

fand ich this post aber die Antworten entweder nicht sinnvoll oder nicht zu meinem Beispiel gelten.

ich die unten in Code versucht ...

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
     "admiral" "Preston" 
     cruisers { 
      {shipName: "[Enterprise]"}, {shipName: "[Reliant]"} 
     } 
    } 

Aber es gibt eine Ausnahme ...

Ambiguous expression could be either a parameterless closure expression or an isolated open code block 

Antwort

2

In Groovy, die {} Syntax für Verschlüsse verwendet. Für Objekte in JSON, mögen Sie die Karte Syntax [:] und für Listen verwenden, die Liste Syntax []:

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
    "admiral" "Preston" 
    cruisers([ 
     [shipName : "[Enterprise]"], 
     [shipName: "[Reliant]"] 
    ]) 
} 

assert json.toString() == 
    '{"fleet":{"admiral":"Preston","cruisers":[{"shipName":"[Enterprise]"},{"shipName":"[Reliant]"}]}}' 

aktualisieren: wie pro Ihrem Follow-up, müssen Sie das gleiche verwenden Liste Syntax [] außerhalb der "[Enterprise]" und "[Reliant]" Strings:

def json = new groovy.json.JsonBuilder() 
def fleetStr = json.fleet { 
    "admiral" "Preston" 
    cruisers([ 
     [shipName : ["Enterprise"]], 
     [shipName: ["Reliant"]] 
    ]) 
} 

assert json.toString() == 
    '{"fleet":{"admiral":"Preston","cruisers":[{"shipName":["Enterprise"]},{"shipName":["Reliant"]}]}}' 
+0

dank, nur eine Follow-up-Frage (etwas nicht verwandt). Angenommen, ich möchte, dass der Wert von shipName als Array-Element im JSON angezeigt wird, obwohl er nur einen Wert haben kann. Zum Beispiel "shipName": ["Enterprise"], können Sie auch dabei helfen, wie ich das machen kann? – AbuMariam

Verwandte Themen