在Groovy中映射到String / String to Map转换

时间:2013-07-12 14:26:31

标签: json grails groovy

我有一个json对象作为

传递给保存函数
{
  "markings": {
      "headMarkings": "Brindle",
      "leftForeMarkings": "",
      "rightForeMarkings": "sock",
      "leftHindMarkings": "sock",
      "rightHindMarkings": "",
      "otherMarkings": ""
}

**编辑**

系统解析它并将其作为映射传递给我的函数。我实际上并没有JSON,虽然自己构建JSON并不困难,但它似乎有点矫枉过正

* 结束编辑**

toString()函数最终将结果作为

放入数据库
"[rightForeMarkings:, otherMarkings:, leftForeMarkings:sock, leftHindMarkings:sock, rightHindMarkings:, headMarkings:brindle]"

然后我想通过调用

将其保存为字符串(相当简单)
params.markings.toString()

从这里,我保存信息并返回更新的信息。

我的问题是,因为我将对象作为字符串存储在数据库中,所以我似乎无法将标记作为地图返回(然后转换为JSON)。

我尝试了一些不同的事情无济于事,虽然我完全有可能在这些事情上做错了......

Eval.me(Item.markings)
evaluate(Item.markings)
Item.markings.toList()

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

投掷我的测试。

在Grails中使用JSON转换器,我认为这应该是方法:( @JamesKleeh和@GrailsGuy的同义词)

def json = '''{
                  "markings": {
                      "headMarkings": "Brindle",
                      "leftForeMarkings": "",
                      "rightForeMarkings": "sock",
                      "leftHindMarkings": "sock",
                      "rightHindMarkings": "",
                      "otherMarkings": ""
                   }
                }'''

def jsonObj = grails.converters.JSON.parse(json)
//This is your JSON object that should be passed in to the method
print jsonObj //[markings:[rightForeMarkings:sock, otherMarkings:, leftForeMarkings:, leftHindMarkings:sock, rightHindMarkings:, headMarkings:Brindle]]

def jsonStr = jsonObj.toString()
//This is the string which should be persisted in db
assert jsonStr == '{"markings":{"rightForeMarkings":"sock","otherMarkings":"","leftForeMarkings":"","leftHindMarkings":"sock","rightHindMarkings":"","headMarkings":"Brindle"}}'

//Get back json obj from json str
def getBackJsobObj = grails.converters.JSON.parse(jsonStr)
assert getBackJsobObj.markings.leftHindMarkings == 'sock'

答案 1 :(得分:4)

如果我理解正确,您想将String转换为JSON对象吗?您实际上可以绕过将其转换为映射,并将其直接解析为JSON对象:

import grails.converters.JSON

def json = JSON.parse(Item.markings)

这将为您提供整个JSON对象,然后您可以像引用地图一样引用这些值。

答案 2 :(得分:1)

编辑#2:

显然没有“安全”的方法将该字符串转换回没有自定义的地图。我建议将结构保存在最初的数据库中。如果你能这样做,那么你所需要的只是JSON.parse()