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

Dav*_*ann 4 grails groovy json

我有一个json对象,它被传递给一个保存函数

{
  "markings": {
      "headMarkings": "Brindle",
      "leftForeMarkings": "",
      "rightForeMarkings": "sock",
      "leftHindMarkings": "sock",
      "rightHindMarkings": "",
      "otherMarkings": ""
}
Run Code Online (Sandbox Code Playgroud)

**编辑**

系统解析它并将其作为映射传递给我的函数.我实际上并没有JSON,虽然自己构建JSON并不困难,但它看起来有点过分

*结束编辑**

toString()函数最终将结果放入数据库中

"[rightForeMarkings:, otherMarkings:, leftForeMarkings:sock, leftHindMarkings:sock, rightHindMarkings:, headMarkings:brindle]"
Run Code Online (Sandbox Code Playgroud)

然后我想通过调用将其保存为字符串(相当简单)

params.markings.toString()
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试了一些不同的东西但无济于事,尽管我完全有可能在这些方面做错了...

Eval.me(Item.markings)
evaluate(Item.markings)
Item.markings.toList()
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

Igo*_*gor 5

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

import grails.converters.JSON

def json = JSON.parse(Item.markings)
Run Code Online (Sandbox Code Playgroud)

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


dma*_*tro 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'
Run Code Online (Sandbox Code Playgroud)