JSON到Groovy解析器

时间:2009-12-10 23:59:46

标签: json groovy

我发现很多关于将Groovy转换为JSON的事情,但奇怪的是,不是其他方式。

那里的Groovy解析器的(最佳)JSON是什么?

5 个答案:

答案 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