Response.json没有显示值未定义的字段

时间:2016-10-15 13:02:20

标签: json node.js express

Response.json未显示值为undefined

的字段

我正在实现一个节点api来处理Mongo数据库中的数据。查询给了我正确的JSON。当我将JSON发送到React客户端时,包含undefined的字段未显示。我究竟做错了什么?有解决办法吗?

要缩小我的问题范围,请将以下代码添加到节点服务器。 console.log将打印正确的输出。例如,它会包含status: undefined,但res.json不会包含任何值为undefined的节点。

app.get("/test", function(req, res) {
    let test = {
        document: "test",
        data: {
            products: [
                {
                    id: 123,
                    type: "smartphone",
            name: "Motorola Moto G",
                    instock: true,
                    status: undefined,
                    link: null
                },
                {
                    id: 456,
                    type: "notsosmartphone",
            name: "Samsung S7",
                    instock: false,
                    status: "burning",
                    link: undefined
                }
            ],
            length: 2,
            date_created: '20161015T09:15',
            status: undefined,
            person: {name: "Kathy", age: 30, cute: true},
            arr:[123,"abc",{"a":"1"},{"b":"2"},{"c":"3"}]
        }
    };
    console.log(test);
    res.json(test);
});

1 个答案:

答案 0 :(得分:4)

Expressjs response.json()方法uses JS JSON.stringify()方法将对象转换为JSON字符串。

JSON.stringify() explicitly removes undefined values from objects,只要它被称为undefined is not a valid JSON value type

您可以使用replacer function明确覆盖undefined行为,并将值设置为null,以便在回复时返回。

示例:

app.set('json replacer', function (key, value) {
    // undefined values are set to `null`
    if (typeof value === "undefined") {
      return null;
    }
    return value;
  }
);