代码之家  ›  专栏  ›  技术社区  ›  weeraa

向JSON添加新属性

  •  0
  • weeraa  · 技术社区  · 7 年前

    使用Node js和Sequelize ORM,我得到了一个数据集。我需要为接收到的数据添加一个新属性,并将其发送到客户端。这就是我所尝试的。

    代码块1

    var varAddOns = { "id" : 5, "Name" : "Cheese"};
    
    global.meal.findOne(
            {
                where: { id: 5 }
            }).then(varMeal => {
                var obj = {};
                obj = varMeal;
                obj.addons = varAddOns;
                res.send(obj); 
            });
    

    它返回一个json,如下所示。(实际上它不包含“加载项”数据)

    代码块2

    {
        "id": 12,
        "mealName": "Burger",    
        "description": "Oily food",    
    }
    

    但实际上我想要的是,

    代码块3

    {
        "id": 12,
        "mealName": "Burger",    
        "description": "Oily food",   
        "addons" : { 
                  "id" : 5, 
                  "Name" : "Cheese"
               }
    }
    

    我试过下面这样的方法,但也不管用。(它返回与“代码块2”相同的json。)

    代码块4

     var newJson = {};
     newJson = JSON.stringify(varMeal);
     newJson['addons'] = varAddOns;
     var retVal = JSON.parse(newJson);
     res.send(retVal);
    

    你能帮我弄清楚问题出在哪里吗?

    编辑

    代码块5

    var newJson = {};
    newJson = varMeal;
    newJson['addons'] = varAddOn;
    var retVal = newJson;// JSON.parse(newJson);
    res.send(retVal);
    

    我也试过“代码块5”。结果与“代码块2”相同。当我使用JSON时。parse(newJson),抛出了一个错误。(错误为 JSON中位置1处的意外标记o )

    2 回复  |  直到 7 年前
        1
  •  1
  •   mcranston18    7 年前

    你需要打电话 .get 在模型实例上,然后向其附加其他属性:

    var varAddOns = { "id" : 5, "Name" : "Cheese"};
    
    global.meal.findOne(
            {
                where: { id: 5 }
            }).then(varMeal => {
                var obj = {};
                obj = varMeal.get();
                obj.addons = varAddOns;
                res.send(obj); 
            });
    

    有几件事:

    • 当你打电话的时候 findOne ,Sequelize返回模型实例,而不是包含数据的普通JS对象。
    • 如果要添加额外的属性以发送给用户,首先需要将模型实例转换为包含数据的JS对象。你可以打电话 varMeal.get() 。从那里,您可以向其添加额外的属性。
    • 没有必要在变量前面加上“var”。最好简单地命名变量 meal
        2
  •  0
  •   user9081620 user9081620    7 年前

    在声明时,需要将JSON作为对象 newJson['addons'] 作为嵌套对象

    您是否尝试过(在代码块4中)不字符串化varmein?