我有一个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()
提前感谢您的帮助!
答案 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()