【问题标题】:Add new attribute to JSON向 JSON 添加新属性
【发布时间】:2018-08-19 14:57:06
【问题描述】:

使用 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) 时,它被抛出了一个错误。 (错误是 位置 1 处 JSON 中的意外标记 o

【问题讨论】:

  • “你能帮我弄清楚问题出在哪里吗?” -- 你不明白JSON 是什么。它是一些数据结构的文本表示。您希望将属性添加到数据结构(在将其表示为 JSON 之前)而不是 JSON。 JSON 表示是一个字符串,向它添加属性没有帮助。

标签: json node.js sequelize.js


【解决方案1】:

您需要在模型实例上调用.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】:

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

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

    【讨论】:

    • 是的。它也行不通。我已经按照您的指示编辑了我的 OP 并添加了代码块 5。
    猜你喜欢
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多