javascript - 序列化 JSON 数组并将其解析为数组

标签 javascript arrays json node.js mongoose

我在序列化和解析数组时遇到问题。我向您展示代码并进行解释:

代码

<小时/>

客户端 POST 请求:

jQuery('.upload').on('click', function()
{
    var flats = [];
    var data_building_id = jQuery(this).attr('data-building-id');
    jQuery('#setup-' + data_building_id).find('.flat-value').each(function()
    {
        flats.push(jQuery(this).html());
    });
    flats.sort();
    var data = 'building={"flats":' + JSON.stringify(flats) + ',"_id":"' + data_building_id + '"}' ;
    makeTheRequest('post', 'admin_buildings', data, 'json', onSuccessSignLog, onErrorGenericAJAX);
});
<小时/>

构建 Controller 代码:

router.post('/admin_buildings', function(req, res)
{
    var building = req.body.building;
    if(req.session && req.session.user && (req.session.user.rol=="Admin" || req.session.user.rol=="superAdmin") && building)
    {
        building = JSON.parse(building);
        building.flats = new Array(building.flats);
        if(building.flats instanceof Array) 
            console.log("buildings.js-> admin_building-> flats is array");  
        buildingDB.updateBuilding(building, function(results)
        {
            //here goes the returning values to the client.
        });
    }
});
<小时/>

建筑模型代码:

this.updateBuilding = function(building,  callback)
{
    Model.findById(building._id, function(err, doc)
    {
        if(err) callback({success:0, error:1, result: err});
        else if(!doc || doc.lenght==0) callback({success:0, error:1});
        else
        {
            if(building.flats && building.flats instanceof Array)doc.flats = [building.flats];
            for (var x=0;x<doc.flats.length;x++)
                console.log("The element " + x + " on the array flat doc is: " + doc.flats[x]);
            if(building.flat)       doc.flats.push(building.flat);
            doc.save(function(err)
            {
                if(err)callback({success:0, error:1, result: err});
                else callback({success:1, error:0, result:doc});
            });
        }
    });
}
<小时/>

好的!!我尽力总结最多的内容,但是......
我所做的是,在客户端:获取一些数据,将它们放入数组中并按字母顺序排序(例如:1a、1b、2a、2b...平面和门),最后我序列化该数组并在帖子上发送.
Controller 获取序列化数据(数组和建筑物 ID)并解析它们。对于此测试,我询问构建解析对象的平场是否是一个数组,在积极的情况下,日志显示“...平场是数组”。然后我将其传递给模型。
如果作为参数传递的对象(建筑物)具有这些字段,则模型仅更改恢复文档的某些字段(地址、城市、州...而不是代码)。而且,对于测试来说,for 循环也必须显示数组上的所有平面,而且确实如此……但不是一一显示,这就是问题。它必须显示如下内容:
数组平面文档上的元素 0 是:1a
数组平面文档上的元素 0 是:1b
数组平面文档上的元素 0 是:2a
数组平面文档上的元素 0 是:2b
但尽管如此,它表明了这一点:
数组平面文档中的元素 0 为:1a,1b,2a,2b
可以做我想做的事,但我迈出了一些糟糕的一步吗?我做错了什么?

非常感谢。

最佳答案

删除该行

building.flats = new Array(building.flats);


因为building.flats已经是一个数组,所以您得到一个嵌套数组,因此您得到结果1a,1b,2a,2b

关于javascript - 序列化 JSON 数组并将其解析为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897802/

相关文章:

javascript - 防止意外更改 JavaScript 原型(prototype)

javascript - 从数据 uri 下载文本文件时如何更改文件名和扩展名

iphone - 对二维数组进行排序

java - 获取数组中所有可能的字符组合

javascript - 在opencart 1.5.5.1中不使用图像管理器上传图像

javascript - Angular Material : Get value out of form

C - 指针和数组

javascript - 通过 json 模式 Sequelize 定义模型

json - 使用 DependOn 配置访问策略

javascript - jQuery 在 JSON 中搜索特定值