【问题标题】:Serializing JSON array and parse it as an array too序列化 JSON 数组并将其解析为数组
【发布时间】:2015-01-09 22:39:58
【问题描述】:

我在序列化和解析数组时遇到问题。我给你看代码,然后解释一下:

代码


客户端 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);
});

构建控制器代码:

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 ......平面和门),最后我序列化这个数组并发送一个帖子.
控制器获取序列化数据(数组和建筑物 ID)并解析它们。对于这个测试,我询问构建解析对象的平面字段是否是一个数组,在积极的情况下,日志显示“......平面是数组”。然后我将它传递给模型。
如果作为参数传递的对象(建筑物)具有这些字段,则该模型仅更改恢复文档的某些字段(地址、城市、州...不在代码上)。而且,对于测试,for 循环也必须显示数组上的所有单位,它确实......但不是一个一个,这是问题。它必须显示如下内容:
数组平面文档中的元素 0 是:1a
数组平面文档中的元素 0 是:1b
数组平面文档中的元素 0 是:2a
数组平面文档中的元素 0 是:2b
但是,它显示了这一点:
数组平面文档中的元素 0 为:1a,1b,2a,2b
有可能做我想做的事,但我迈出了错误的一步??我做错了什么??

非常感谢。

【问题讨论】:

    标签: javascript arrays json node.js mongoose


    【解决方案1】:

    删除线

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


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

    【讨论】:

    • 非常感谢...它来自旧版本(我做了太多尝试),我忘了删除这些最后的。还有另外一个错误的隐藏...我写了 doc.flats = [building.flats];它必须是 doc.flats = building.flats;但如果没有你的帮助,我认为永远找不到......谢谢@friedi
    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2017-11-26
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多