具有嵌套对象的对象的完整JSON呈现

具有嵌套对象的对象的完整JSON呈现,json,mongodb,grails,Json,Mongodb,Grails,我有一个带有mongodb插件的grails应用程序 我的所有域对象都是: class Person { ObjectId id String name } 及 我的控制器应根据id提供一些如的完整数据: class MyController { def like() { def like = Like.findById(new ObjectId("someIdHere")); render(like as grails.converters.JSON) } }

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

我的所有域对象都是:

class Person {
  ObjectId id
  String name
}

我的控制器应根据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"
  }
}
我的问题是:是否有任何方法可以构造MongoDB(DBObject)数据对象的完整(带有引用对象)JSON?我通过转义字段“class”、元类和“dbo”发现了这一点。但我认为可以用Expando类完成,但我找不到正确的方法

无论如何谢谢你, 马克西姆改变

render(like as grails.converters.JSON)


我相信标准的方法是现在使用命名的configs,所以您需要

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

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


如果这仍然是一个问题,您可能希望尝试另一个JSON库,例如,它比Grails JSON库对JSON对象的序列化提供了更多的控制。

我尝试过这种方法,但响应是`{“class”:“like”,“id”:{…},“createdAt”:“2012-06-22T11:05:15Z”,“from”:{“class”:“Person”,“id”:{…},“name”:null},“to”:{“class”:“Person”,“id”:{…},“name”:null}}`因此深度配置不会触发惰性方法。我尝试过这种方法,但响应是{“class”:“Like”,“id”:{…},“createdAt”:“2012-06-22T11:05:15Z”,“from”:{“class”:“Person”,“id”:{…},“name”:null},“to”:{“class”:“Person”,“id”:{…},“name”:null}}所以deep配置不会触发惰性方法。deep.JSON现在不推荐使用。请使用JSON.Use(“deep”)对于深度转换。嗨!我已经为我的类编写了一个自定义工作。我知道这对我不好)。下次我会使用你的建议,我想。无论如何谢谢你!不吉利的配置不适合我…但可以帮助我。Thnx!永远不要这样做,想象你有许多嵌套对象,你只想更改一个属性,用lazy false加载内存中的所有对象、嵌套对象、嵌套对象中的子嵌套对象等。
render(like as grails.converters.deep.JSON)
JSON.use("deep") {
    render like as JSON
}
   class Like {
  ObjectId id
  Person from
  Person to
  Date createdAt



 static mapping = {
        from lazy: false
    }

}