Sails.js sails JSON属性未正确保存序列化的JSON对象
我试图在MongoDB中保存一个3D数组,所以显然我决定将数据保存为JSON。 为简单起见,我正在尝试保存每周食物菜单,因此数组维度为:Week x Day x ArrayOfMenuItems Restaurant.js(模型) 下面是我创建并希望解析为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' ], [], [], []
[ ,
[ ,
,
[ '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
属性指定为typejson
,但随后将字段设置为字符串值(即字符串化的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