【问题标题】:Grails - How to covert a query result (from MongoDB) to a JSON string without redundant fieldsGrails - 如何将查询结果(来自 MongoDB)转换为没有冗余字段的 JSON 字符串
【发布时间】:2013-01-03 12:47:34
【问题描述】:

我有以下域类

class Settings {
    static constraints = {
        pageID(nullable: false, unique: true)
        lp()
    }

    String pageID
    Map lp
}

我正在像这样查询数据库:

...
def query = Settings.where {pageID == id}
def result = query.find()

这是评估结果的屏幕截图:

现在我正在寻找一种将结果格式化为 JSON 格式的方法,如下所示:

{"lp":{"account":"12345678","appKey":"64dsfg64dg64fg65dfg6","domain":"my.domain.com"},"pageID":"123456"}

提取字段的正确方法是什么?如果我可以避免手动获取每个字段,那将是最好的。谢谢:)

【问题讨论】:

  • 如果你的结果是DBObject,你只需调用toString()就可以得到一个JSON字符串。
  • 感谢您的回复,我的结果来自类型设置(我的域类)...还有其他想法吗?

标签: json mongodb grails grails-domain-class database


【解决方案1】:

由于没有找到native函数,所以我用@Jinzhao Wu的方式写了这个辅助函数:

def getDBRecord(Object dc) {
    def jo = new JSONObject()
    def domainClass = new DefaultGrailsDomainClass(dc.class)
    def props = domainClass.getPersistantProperties()
    for (int i = 0; i < props.length; i++) {
        jo.put(props[i].name, dc[props[i].name]);
    }
    return jo;
}

希望对他人有所帮助

【讨论】:

    【解决方案2】:

    只需使用 gorm 动态查找器:

    def result = Settings.findByPageId(id)
    render result as JSON
    

    【讨论】:

    • 嗨,感谢您的回复,但是我仍然得到不属于我的域类的字段(例如:errors、metaClass 等)所以如果我将它呈现为 JSON,我的客户端会变得多余字段
    • 使用像 result.remove('errors') 这样的 remove 方法来删​​除无用的字段。或者渲染 result.persistentProperties
    • 这就是我现在所做的,我觉得这是错误的方式。在我看来,必须有一种更优雅的方式来获取您在域类中定义的字段。
    • 你输入答案的方式不是我推荐的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多