【问题标题】:sails js JSON attribute does not save serialized JSON object properlySails js JSON 属性未正确保存序列化的 JSON 对象
【发布时间】:2014-05-29 14:33:36
【问题描述】:

我正在尝试在 MongoDB 中保存一个 3D 数组,所以显然我决定将数据保存为 JSON。 为简单起见,我尝试保存每周食物菜单,因此数组维度为:周 x 天 x ArrayOfMenuItems。

Restaurant.js(模型)

    menuItems: {
        type: 'json',
        defaultsTo: null
    }

这是我创建并希望解析为 JSON 的 result 对象:

[ ,
  [ ,
    ,
    [ '538498de6a965778228e7e0e' ],
    [ '538498ed6a965778228e7e0f' ],
    [],
    [],
    [] ],
  [ ,
    ,
    [ '538498de6a965778228e7e0e', '538499156a965778228e7e11' ],
    [],
    [],
    [],
    [] ],
  [ , , [], [], [], [], [] ],
  [ , , [], [], [], [], [] ] 
]

JSON.stringify(结果):

[null,[null,null,["538498de6a965778228e7e0e"],["538498ed6a965778228e7e0f"],[],[],[]],[null,null,["538498de6a965778228e7e0e","538499156a965778228e7e11"],[],[]
,[],[]],[null,null,[],[],[],[],[]],[null,null,[],[],[],[],[]]]

然后我将它保存到数据库中:

restaurant.menuItems = JSON.stringify(result);
restaurant.save(function(err) {
     if (err) return res.serverError("Failed to save menu items");
});

在下一次通话中,当我尝试解析 restaurant.menuItems 时,我得到“未捕获的异常:意外令牌”,

console.log('BEGIN-{0}-END'.format(restaurant.menuItems)); // see print 
var currentItems = JSON.parse(restaurant.menuItems); // throws exception

但是,这并不奇怪,因为调用 JSON.parse 之前的打印消息给出:

BEGIN-,,,538498de6a965778228e7e0e,538498ed6a965778228e7e0f,,,,,,538498de6a965778228e7e0e,538499156a965778228e7e11,,,,,,,,,,,,,,,,,,-END

我在这里做错了什么,应该如何使用“json”类型的属性? 我一定是做错了什么,但没有使用它的文档或示例。

如果我将“字符串化 JSON 文本”作为字符串保存在数据库中,我相信我可以找到解决方法,但这看起来很难看。

有什么想法吗?

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    您将menuItems 属性指定为json 类型,但随后将该字段设置为字符串值(即字符串化的JSON)。这是有效的,因为字符串是有效的 JSON,但这不是您想要的。只需直接将属性设置为结果对象,无需先对其进行字符串化。如果需要,Waterline 在适配器层处理数据序列化/反序列化的内部任务(MongoDB 和 Postgres 本身处理 JSON,因此不需要序列化)。

    【讨论】:

    • 感谢实际上我将它设置为“数组”,它可以处理多维数组。 “JSON”属性类型什么时候有用?
    • array 基本上是json 的别名。
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2014-08-22
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多