Ho trovato molte cose sulla conversione di Groovy in JSON, ma stranamente, non nell'altro modo.parser da JSON a Groovy
Qual è il (migliore) parser JSON in Groovy in giro?
Ho trovato molte cose sulla conversione di Groovy in JSON, ma stranamente, non nell'altro modo.parser da JSON a Groovy
Qual è il (migliore) parser JSON in Groovy in giro?
Poiché le classi Groovy compilate sono compatibili con classi Java, si dovrebbe essere in grado di utilizzare qualsiasi libreria Java per la conversione di JSON per POJO (o Pogos). Jackson è una scelta piuttosto popolare che è possibile utilizzare per convertire JSON in questo modo:
String json = '{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}'
ad una mappa utilizzando:
Map<String,Object> userData = mapper.readValue(json, Map.class)
Oppure, se si desidera convertire il JSON a una classe Utente Groovy:
User userData = mapper.readValue(json, User.class)
Questo mapperà le proprietà nella classe Groovy alle chiavi nel JSON.
JSON-lib afferma di essere in grado di trasformare POGO a JSON e ritorno. Se POGO significa quello che penso che faccia (Plain Old Groovy Object), sei impostato :).
danno questo esempio:
def strAsJsonObject = "{integer:1, bool: true}" as JSONObject
Aggiornamento:
ho provato io stesso lib, questo è il codice completo:
import net.sf.*;
import net.sf.json.*;
import net.sf.json.groovy.*;
println "hi"
GJson.enhanceClasses()
def strAsJsonObject = "{integer:1, bool: true}" as JSONObject
println strAsJsonObject
Sarà inseguirti attraverso una maratona di download delle dipendenze (ezmorph, commons lang, commons logger) e una volta risolti tutti, questo è ciò che ottieni:
Exception in thread "main" org.codehaus.groovy.runtime.typehandling.GroovyCastException: non può lanciare l'oggetto '{intero: 1, bool: true}' con classe 'java.lang.String' alla classe 'net.sf.json.JSONObject'
Secondo The mailing list, si ottiene questo per non chiamare GJsonlib.enhanceClasses(), ma mi hai chiamato che, come potete vedere qui sopra.
Ho concluso che è uno sforzo utile per odiare il JSON-lib di Groovy.
Io uso JSON-lib in HTTPBuilder, ma io uso la classe JSONSlurper per analizzare una stringa a un'istanza JSON:
JSON jsonMapObject = new JsonSlurper().parse("{integer:1, bool: true}");
Per passare da Object a JSON, faccio questo:
//from a map:
new JSONObject().putAll([one:'1', two:'two']).toString()
//from an object:
JSONObject.fromObject(somePOGO).toString()
A questo punto, è necessario utilizzare "new JsonSlurper(). ParseText" invece di utilizzare "new JsonSlurper(). Parse" – sourcerebels
Per le persone che hanno problemi con json-lib e GJson.enhanceClasses(). Prova invece GJson.enhanceString().
GJson.enhanceString()
def o = "{\"x\": 20.0}" as JSONObject
GJson.enhanceString() aiuta – squiddle
Se si è su Groovy 1.8 o versione successiva, esiste una build in JsonSlurper che è possibile utilizzare in questo modo:
import groovy.json.JsonSlurper
//Attention: you have to use double quotes inside the json string
def jsonObj = new JsonSlurper().parseText('{ "name":"Peter", "age": 23}')
assert jsonObj.name == "Peter"
assert jsonObj.age == 23
//this won't work, because it's not defined
assert jsonObj.gender == null
JSONSlurper causa effettivamente eccezioni StackOverflow su alcuni documenti JSON a causa dell'uso liberale di espressioni regolari e avvertimenti nell'implementazione di regexp di Java. Vedi http://jira.codehaus.org/browse/GROOVY-4903 (contrassegnato come corretto ma il problema è ancora presente) –
JsonSlurper inoltre non deserializza le date da JSON, che è davvero fastidioso. – erturne
@erturne che potrebbe avere qualcosa a che fare con Data che non fa parte dello standard JSON. Se il JSON che stai ricevendo ha 'new Date()' o un'altra sintassi non-standand, dovrai sottoclassi JsonSlurper, altrimenti puoi semplicemente iterare e correggere la mappa restituita. – Tobia
Ciò produce un errore di trasmissione. Ho capito che la sintassi 'obj as JSONObject' converte in realtà un oggetto Groovy in JSON. – Gzorg
L'ho visto sul documento, quindi dovrebbe funzionare come previsto, ma non funziona per me. – Gzorg
Hai eseguito GJson.enhanceClasses()? – nes1983