Sails.js sails JSON属性未正确保存序列化的JSON对象

Sails.js sails JSON属性未正确保存序列化的JSON对象,sails.js,waterline,Sails.js,Waterline,我试图在MongoDB中保存一个3D数组,所以显然我决定将数据保存为JSON。 为简单起见,我正在尝试保存每周食物菜单,因此数组维度为:Week x Day x ArrayOfMenuItems Restaurant.js(模型) 下面是我创建并希望解析为JSON的结果对象: [ , [ , , [ '538498de6a965778228e7e0e' ], [ '538498ed6a965778228e7e0f' ], [], [], []

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

Restaurant.js(模型)

下面是我创建并希望解析为JSON的结果对象:

[ ,
  [ ,
    ,
    [ '538498de6a965778228e7e0e' ],
    [ '538498ed6a965778228e7e0f' ],
    [],
    [],
    [] ],
  [ ,
    ,
    [ '538498de6a965778228e7e0e', '538499156a965778228e7e11' ],
    [],
    [],
    [],
    [] ],
  [ , , [], [], [], [], [] ],
  [ , , [], [], [], [], [] ] 
]
JSON.stringify(结果):

然后我将其保存到数据库:

restaurant.menuItems = JSON.stringify(result);
restaurant.save(function(err) {
     if (err) return res.serverError("Failed to save menu items");
});
在下一个调用中,当我尝试解析restaurant.menuItems时,我得到“未捕获的异常:意外令牌,”

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

BEGIN-,,,538498de6a965778228e7e0e,538498ed6a965778228e7e0f,,,,,,538498de6a965778228e7e0e,538499156a965778228e7e11,,,,,,,,,,,,,,,,,,-END
这里我做错了什么?应该如何使用“json”类型的属性? 我一定是做错了什么,但没有使用它的文档或示例

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


有什么想法吗?

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

谢谢,实际上我将其设置为“数组”,它处理多维数组。“JSON”属性类型什么时候有用?
array
基本上是
JSON
的别名。
restaurant.menuItems = JSON.stringify(result);
restaurant.save(function(err) {
     if (err) return res.serverError("Failed to save menu items");
});
console.log('BEGIN-{0}-END'.format(restaurant.menuItems)); // see print 
var currentItems = JSON.parse(restaurant.menuItems); // throws exception
BEGIN-,,,538498de6a965778228e7e0e,538498ed6a965778228e7e0f,,,,,,538498de6a965778228e7e0e,538499156a965778228e7e11,,,,,,,,,,,,,,,,,,-END