Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向JSON添加新属性_Json_Node.js_Sequelize.js - Fatal编程技术网

向JSON添加新属性

向JSON添加新属性,json,node.js,sequelize.js,Json,Node.js,Sequelize.js,使用Node js和Sequelize ORM,我得到了一个数据集。我需要为接收到的数据添加一个新属性,并将其发送到客户端。这就是我试过的 代码块1 var varAddOns = { "id" : 5, "Name" : "Cheese"}; global.meal.findOne( { where: { id: 5 } }).then(varMeal => { var obj = {};

使用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)

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


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

您需要调用
。获取模型实例上的
,然后向其附加额外属性:

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对象。您可以通过调用
    varmein.get()
    ,将额外的属性添加到模型实例中
  • 没有必要在变量前面加上“var”。最好简单地将变量命名为
    fine

是的。它也不起作用。我已经按照您的指示编辑了我的OP并添加了代码块5。“您能帮我找出问题出在哪里吗?”--您不知道问题出在哪里。它是某些数据结构的文本表示。您想向数据结构添加属性(在将其表示为JSON之前)JSON表示是一个字符串,向它添加属性没有帮助。