Groovy - Konvertiert ein Objekt in eine JSON-Zeichenfolge


74

Ich bin ziemlich an Grails-Konverter gewöhnt, bei denen Sie jedes Objekt wie folgt in eine JSON-Darstellung konvertieren können ( http://grails.org/Converters+Reference ).

return foo as JSON

Aber im einfachen Groovy kann ich keinen einfachen Weg finden, dies zu tun ( http://groovy-lang.org/json.html )

JSONObject.fromObject(this)

Leere JSON-Strings zurückgeben ...

Vermisse ich einen offensichtlichen Groovy-Konverter? Oder sollte ich mich für eine Jackson- oder Gson-Bibliothek entscheiden?


1
native "groovige Eigenschaften" sind reinen Java-Bibliotheken nicht bekannt (dh Bibliotheken, die an Java Reflection / Java Beans arbeiten)
Jacek Cz

Antworten:


146

Meinst du wie:

import groovy.json.*

class Me {
    String name
}

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

println new JsonBuilder( o ).toPrettyString()

1
Das funktioniert tatsächlich. Aber das Verrückte ist, wenn Sie "public String name" angeben. Wenn Sie einen öffentlichen Accessor verwenden, scheint JsonBuilder diese zu ignorieren ...
Wavyx

@Wavyx Ja, dann schafft es nicht metaClass.properties, also wird es nicht vom Erbauer abgeholt: - /
tim_yates

Ok .. nur andere hässliche Lösungen warendef toJsonString(Boolean prettyPrint = false) { Map props = [:] def outObject = Publication.declaredFields.findAll { !it.synthetic && it.name != 'props' }.collectEntries { v -> [ (v.name):this[v.name] ] } outObject << props String json = JsonOutput.toJson(outObject) prettyPrint ? JsonOutput.prettyPrint(json) : json }
Wavyx

Oder vielleicht:new JsonBuilder( this.getClass().declaredFields.findAll { !it.synthetic }.collectEntries { [ (it.name):this[ it.name ] ] } ).toString()
tim_yates

22

Ich konnte die anderen Antworten nicht in der Evaluierungskonsole in Intellij zum Laufen bringen, also ...

groovy.json.JsonOutput.toJson(myObject)

Das funktioniert ganz gut, aber leider

groovy.json.JsonOutput.prettyString(myObject)

hat bei mir nicht funktioniert.

Um es schön gedruckt zu bekommen, musste ich das tun ...

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

9

Sie können dafür JsonBuilder verwenden .

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()

7
Bitte geben Sie eine vollständige Antwort an, da diese hilfreicher ist als ein Link zu einer anderen Website. Dieser Link funktioniert nicht mehr.
Antonyh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.