具有嵌套对象的对象的完整JSON呈现
我有一个带有mongodb插件的grails应用程序 我的所有域对象都是:具有嵌套对象的对象的完整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) } }
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
}
}