完整的JSON渲染对象与嵌套对象

时间:2012-06-27 10:58:22

标签: json mongodb grails

我有一个带有mongodb插件的grails应用程序。

我的所有域名对象都是:

class Person {
  ObjectId id
  String name
}

class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt
}

我的控制器应根据某些Like ID:

提供完整数据
class MyController {
  def like() {
    def like = Like.findById(new ObjectId("someIdHere"));
    render(like as grails.converters.JSON)
  }
}

我希望收到类似的完整JSON对象:

{
  "class":"Like",
  "id":{
    "class":"org.bson.types.ObjectId",
    "inc":1483542456,
    "machine":805594765,
    "new":false,
    "time":1340363115000,
    "timeSecond":1340363115
  },
  "createdAt":"2012-06-22T11:05:15Z",
  "from":{
    "class":"Person",
    "id":{ ... },
    "name":"Some name here"
  },
  "to":{
    "class":"Person",
    "id":{ ... },
    "name":"Some name here"
  }
}

但我收到了对象的第一级属性:

{
  "class":"Like",
  "id":{
    "class":"org.bson.types.ObjectId",
    "inc":1483542456,
    "machine":805594765,
    "new":false,
    "time":1340363115000,
    "timeSecond":1340363115
  },
  "createdAt":"2012-06-22T11:05:15Z",
  "from":{
    "class":"Person",
    "id":"4fd31d453004dc0f010aca51"
  },
  "to":{
    "class":"Person",
    "id":"4fd31d463004dc0f010aca89"
  }
}

我的问题是:有没有办法构建完整的(带引用的对象)mongo db(DBObject)数据对象的JSON?我发现这个solution with JSONBuiled有转义字段'class',metaClass'和'dbo'。但我认为可以使用Expando类来完成,但我找不到正确的方法......

谢谢你, 马克西姆

4 个答案:

答案 0 :(得分:2)

更改

render(like as grails.converters.JSON)

render(like as grails.converters.deep.JSON)

答案 1 :(得分:1)

如果这对你来说仍然是一个问题,你可能想尝试另一个JSON库,比如Jackson,它可以更好地控制对JSON的序列化对象,而不是Grails JSON库。

答案 2 :(得分:0)

我认为标准方法是现在使用命名配置,以便

JSON.use("deep") {
    render like as JSON
}

答案 3 :(得分:0)

将子关联设置为非惰性。 所以

   class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt



 static mapping = {
        from lazy: false
    }

}