我发现很多关于将Groovy转换为JSON的事情,但奇怪的是,不是其他方式。
那里的Groovy解析器的(最佳)JSON是什么?
答案 0 :(得分:35)
如果您使用的是Groovy 1.8或更高版本,则可以使用以下方式构建JsonSlurper:
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
答案 1 :(得分:13)
因为已编译的Groovy类与Java类兼容,所以您应该能够使用任何Java库将JSON转换为POJO(或POGO)。 Jackson是一个相当受欢迎的选择,您可以使用它来转换JSON,如下所示:
String json = '{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}'
到地图使用:
Map<String,Object> userData = mapper.readValue(json, Map.class)
或者,如果要将JSON转换为Groovy User类:
User userData = mapper.readValue(json, User.class)
这会将Groovy类中的属性映射到JSON中的键。
答案 2 :(得分:6)
JSON-lib声称可以将POGO转换为JSON并返回。如果POGO意味着我的想法(Plain Old Groovy Object),那么你就设置了:)。
他们举了这个例子:
def strAsJsonObject = "{integer:1, bool: true}" as JSONObject
<强>更新强>:
我自己尝试过lib,这是完整的代码:
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
它将通过下载依赖项(ezmorph,commons lang,commons logger)的马拉松追逐你,一旦你解决了所有问题,这就是你得到的:
线程“main”中的异常 org.codehaus.groovy.runtime.typehandling.GroovyCastException: 无法转换对象'{integer:1,bool: true}'with class'java.lang.String' 类'net.sf.json.JSONObject'
根据The mailing list,你得到这个不是为了不调用GJsonlib.enhanceClasses(),但我确实称之为,如上所示。
我的结论是,讨厌Groovy的JSON-lib是值得的。
答案 3 :(得分:4)
我在HTTPBuilder中使用JSON-lib,但我使用JSONSlurper类将字符串解析为JSON实例:
JSON jsonMapObject = new JsonSlurper().parse( "{integer:1, bool: true}" );
要从Object转到JSON,我这样做:
//from a map:
new JSONObject().putAll( [one:'1', two:'two']).toString()
//from an object:
JSONObject.fromObject( somePOGO ).toString()
答案 4 :(得分:3)
对于遇到json-lib和GJson.enhanceClasses()问题的人。请尝试使用GJson.enhanceString()。
GJson.enhanceString()
def o = "{\"x\": 20.0}" as JSONObject