JSON到Groovy解析器

Gzo*_*org 21 groovy json

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

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

Fa1*_*gel 36

如果您使用的是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
Run Code Online (Sandbox Code Playgroud)

  • JsonSlurper也没有从JSON反序列化日期,这真的很烦人. (3认同)

Dón*_*nal 13

因为已编译的Groovy类与Java类兼容,所以您应该能够使用任何Java库将JSON转换为POJO(或POGO).Jackson是一个相当受欢迎的选择,您可以使用它来转换JSON,如下所示:

String json = '{
  "name" : { "first" : "Joe", "last" : "Sixpack" },
  "gender" : "MALE",
  "verified" : false,
  "userImage" : "Rm9vYmFyIQ=="
}'
Run Code Online (Sandbox Code Playgroud)

到地图使用:

Map<String,Object> userData = mapper.readValue(json, Map.class)
Run Code Online (Sandbox Code Playgroud)

或者,如果要将JSON转换为Groovy User类:

User userData = mapper.readValue(json, User.class)
Run Code Online (Sandbox Code Playgroud)

这会将Groovy类中的属性映射到JSON中的键.


nes*_*983 6

JSON-lib声称能够将POGO转换为JSON并返回.如果POGO意味着我的想法(Plain Old Groovy Object),那么你就设置了:).

他们给出了这个例子:

def strAsJsonObject = "{integer:1, bool: true}" as JSONObject
Run Code Online (Sandbox Code Playgroud)

更新:

我自己试过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
Run Code Online (Sandbox Code Playgroud)

它将通过下载依赖项(ezmorph,commons lang,commons logger)的马拉松追逐你,一旦你解决了所有问题,这就是你得到的:

线程"main"中的异常org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将类'java.lang.String'的对象'{integer:1,bool:true}'强制转换为类'net.sf.json.的JSONObject"

根据邮件列表,你得到这个没有调用GJsonlib.enhanceClasses(),但我确实称之为,如上所述.

我的结论是,讨厌Groovy的JSON-lib是值得的.