具有嵌套对象的对象的完整 JSON 渲染
Posted
技术标签:
【中文标题】具有嵌套对象的对象的完整 JSON 渲染【英文标题】:Full JSON render of object with nested object 【发布时间】:2012-06-28 19:04:26 【问题描述】:我有一个带有 mongodb 插件的 grails 应用程序。
我所有的域对象都是:
class Person
ObjectId id
String name
和
class Like
ObjectId id
Person from
Person to
Date createdAt
我的控制器应该根据一些Like
by 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 类来完成,但我找不到正确的方法......
谢谢你, 马克西姆
【问题讨论】:
【参考方案1】:改变
render(like as grails.converters.JSON)
到
render(like as grails.converters.deep.JSON)
【讨论】:
我试过这种方式,但响应是 "class":"Like", "id":..., "createdAt":"2012-06-22T11:05 :15Z", "from": "class":"Person", "id":..., "name":null , "to": "class":"Person", "id" :..., "name":null 所以深度配置不会触发惰性方法。 deep.JSON 现在已弃用。使用 JSON.use("deep") 进行深度转换。【参考方案2】:我相信标准方法是现在使用命名配置,所以你想要
JSON.use("deep")
render like as JSON
【讨论】:
我试过这种方式,但响应是` "class":"Like", "id":..., "createdAt":"2012-06-22T11: 05:15Z", "from": "class":"Person", "id":..., "name":null , "to": "class":"Person", "id ":..., "name":null ` 所以深度配置不会触发惰性方法。【参考方案3】:如果这仍然是您的问题,您可能想尝试另一个 JSON 库,例如 Jackson,它比 Grails JSON 库可以更好地控制将对象序列化为 JSON。
【讨论】:
嗨!我围绕我的班级写了一个定制的作品。我知道这对我不好)。下次我会使用你的建议,我想。无论如何谢谢你!【参考方案4】:将子关联设置为非惰性。 所以
class Like
ObjectId id
Person from
Person to
Date createdAt
static mapping =
from lazy: false
【讨论】:
unlazy 配置不太适合我...但可以提供帮助。谢谢! 永远不要那样做,想象你有很多嵌套对象,你只想改变一个属性,你会在内存中加载所有对象,嵌套对象,子嵌套对象在嵌套对象等中。以上是关于具有嵌套对象的对象的完整 JSON 渲染的主要内容,如果未能解决你的问题,请参考以下文章