2014-01-08 15 views
49

ich ziemlich gewöhnt bin Wandler Grails, wo Sie jedes Objekt in einer JSON Darstellung Groovy - Konvertieren Objekt JSON-String

return foo as JSON 

Aber im Klar groovy wie diese (http://grails.org/Converters+Reference)

umwandeln können, kann ich nicht finden eine einfache Möglichkeit, diese ( http://groovy-lang.org/json.html)

JSONObject.fromObject(this) 

Rückkehr leer json Strings zu tun ...

Fehle ich einen offensichtlichen Groovy Konverter? Oder sollte ich für Jackson oder Gson Bibliothek gehen?

+0

native „groovy Eigenschaften“ sind nicht bekannt reine Java-Bibliotheken (zB Bibliotheken arbeiten auf Java Reflexion/Java Beans) –

Antwort

92

Meinen Sie wie:

import groovy.json.* 

class Me { 
    String name 
} 

def o = new Me(name: 'tim') 

println new JsonBuilder(o).toPrettyString() 
+1

Dies ist in der Tat zu tun hatte Arbeiten. Aber die verrückte Sache ist, wenn Sie "öffentlichen String-Namen" angeben. Wenn Sie einen öffentlichen Accessor verwenden, scheint JsonBuilder sie zu ignorieren ... – Wavyx

+0

@Wavyx Ja, dann wird es nicht in 'metaClass.properties' geschafft, daher wird es vom Builder nicht übernommen: -/ –

+0

Ok .. nur andere hässliche Lösungen waren 'def toJsonString (Boolean prettyPrint = false) { Karte requisiten = [:] def outObject = Veröffentlichung.declaredFields.findAll {! it.synthetic && it.name! = 'Requisiten'} .collectEntries {v -> [(v.name): dies [v.name]] } outObject << Requisiten Zeichenfolge json = JsonOutput.toJson (outObject) prettyPrint? JsonOutput.prettyPrint (json): json } ' – Wavyx

4

Sie JsonBuilder dafür verwenden können.

Beispielcode:

import groovy.json.JsonBuilder 

class Person { 
    String name 
    String address 
} 

def o = new Person(name: 'John Doe', address: 'Texas') 

println new JsonBuilder(o).toPrettyString() 
+4

Bitte denken Sie daran, eine vollständige Antwort anzugeben, da diese hilfreicher ist als ein Link zu einer anderen Site. Dieser Link funktioniert nicht mehr. – antonyh

8

Ich konnte nicht die anderen Antworten erhalten so innerhalb der Konsole bewerten in IntelliJ zu arbeiten ...

groovy.json.JsonOutput.toJson(myObject) 

Das funktioniert ganz gut, aber leider

groovy.json.JsonOutput.prettyString(myObject) 

hat nicht für mich funktioniert.

es recht zu erhalten gedruckt ich dieses ...

groovy.json.JsonOutput.prettyPrint(groovy.json.JsonOutput.toJson(myObject)) 
Verwandte Themen