将包含 json 字符串的 mysql 字符串列编组到 groovy 中的对象

Marshaling mysql string column that contains json string to object in groovy

我是 groovy Grails 的新手,正在尝试了解如何使用 GORM

我们有 SQL table 和字符串类型的列,其中包含 JSON 表示某个对象的字符串 (我不能改变数据库设计)

我知道在 groovy 中模型对象代表 SQL 记录,通常我们可以使用编组器将对象渲染到 JSON

但我需要的是获取、创建或保存具有 Json 字符串列的模型对象,该字符串列将呈现给 groovy 中的对象,但找不到有关如何呈现的任何信息去做

例如为了简化我将有以下 table : id(number), json(longstring) 在 JSON:

{"name":"object1", "list":[{"item":"item1", "type":"type1"},{"item":""item2", "type":"type2"},..]}

和以下 类:

class MainModelClass {
Long id
MyObject o
...

}

class MyObject {
List<Item> items
...
}

class Item {
String item
String type
...
}

如何让模型对象将 JSON 解析为对象结构

谢谢

您可以使用 transient 属性 的简单技巧,如下所示:

import groovy.json.*

class MainModelClass {

   String originalJson

   static final JsonSlurper slurper = new JsonSlurper()

   MyObject getMyObject(){
     slurper.parseText( originalJson ) as MyObject
   }

   void setMyObject( MyObject myObject ){
     originalJson = JsonOutput.toJson myObject
   }

   static transients = [ 'myObject' ]

}

您可能希望使用 Jackson Mapper 更好地控制编组。