【问题标题】:Marshaling mysql string column that contains json string to object in groovy将包含json字符串的mysql字符串列编组到groovy中的对象
【发布时间】:2023-03-24 19:23:01
【问题描述】:

我是 groovy Grails 的新手,并试图了解如何使用 GORM

我们有一个带有字符串类型列的 SQL 表,其中包含表示某个对象的 JSON 字符串 (我无法替代数据库设计)

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

但我需要的是获取、创建或保存具有 Json 字符串列的模型对象,该列将被渲染到 groovy 中的对象,但找不到任何有关如何操作的信息

例如,为了简化,我将有下表: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
...
}

如何让 Model 对象将 JSON 解析为 Object 结构

谢谢

【问题讨论】:

    标签: mysql json grails groovy grails-orm


    【解决方案1】:

    您可以对 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 更好地控制编组。

    【讨论】:

    • 谢谢,我尝试检查 Jackson Mapper 和 JsonSlurper 但我发现它们都不支持深度反序列化,您知道是否有任何支持它的选项?
    • 据我所知,Jackson 在处理 POJ(G)Os 的深度解组方面没有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2019-04-03
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多