在NodeJS中向JSON对象添加新属性

时间:2017-02-16 05:18:13

标签: javascript json node.js

我在NodeJS中使用API​​方法调用一个函数,接收一个JSON对象intent,尝试添加一个新属性"测试"并返回该对象。问题是新属性"测试"永远不会显示在返回的对象中。但是,现有的"处理过的"是正确的改变。有什么想法吗?

function process_first(req, res, next) {
  Intent.getFirstUnprocessed()
    .then(intent => {
        intent.tested = "DONE";
        intent.processed = true;
        res.json(intent);
      })
    .catch(e => next(e));
}

intent最初有此值:

{"processed":false,"payload":"hello","createdAt":"2017-02-16T05:07:19.596Z"}

然后它返回:

{"processed":true,"payload":"hello","createdAt":"2017-02-16T05:07:19.596Z"}

1 个答案:

答案 0 :(得分:2)

您的intent对象可以是一些自定义对象(由某些库返回,如mongoose)。大多数情况下,您无法直接修改这些对象。您可以将它们更改为普通的javascript对象。这些库为您提供了用于此目的的方法(如toObject或toJSON)。此外,如果它是一个集合,如地图或类似的东西,它也有toObject方法。

如果对象是地图请试试这个:

function process_first(req, res, next) {
  Intent.getFirstUnprocessed()
    .then(intent => {
        var intenObject = intent.toObject();
        intenObject.tested = "DONE";
        intenObject.processed = true;
        res.json(intenObject);
      })
    .catch(e => next(e));
}

如果是json字符串

function process_first(req, res, next) {
  Intent.getFirstUnprocessed()
    .then(intent => {
        var intenObject = JSON.parse(intent);
        intenObject.tested = "DONE";
        intenObject.processed = true;
        res.json(intenObject);
      })
    .catch(e => next(e));
}