【问题标题】:Response JSON object or JSON.stringify?响应 JSON 对象或 JSON.stringify?
【发布时间】:2014-04-30 03:11:38
【问题描述】:

假设我要返回 JSON 内容

var content = {
  a: 'foo',
  b: 'bar'
};

返回 JSON 数据的最佳做法是什么?

A) 按原样返回对象;即res.end(content)?

B) JSON.stringify(content) 然后在客户端调用JSON.parse(content)

【问题讨论】:

    标签: json node.js express


    【解决方案1】:

    如果您使用 express 的res.json 发送响应,您可以将对象直接发送为application/json 编码响应。

    app.get('/route/to/ressource', function(req, res){
      var oMyOBject = {any:'data'};
    
       res.json(oMyOBject);
    });
    

    【讨论】:

    • 是的,我知道该功能。但是我只是想知道有什么优点和缺点?为什么更喜欢转换成字符串或反过来呢?
    • @dopplesoldner 其实res.send()已经完成了stringify的工作,无论你做什么,客户端都会收到JSON格式的数据。
    • 你不需要设置类型,因为.send会帮你设置,如果你想要格式化输出,你可以设置app.set('json spaces', '\t')
    • @loganfsmyth 感谢您的提示
    【解决方案2】:

    客户端必须始终发送一个字符串。这就是协议所说的。毕竟,HTTP 是一个范围广泛的协议,并非所有语言都支持 JSON 对象,更不用说 JavaScript 数据了。

    如果您不将其转换为 JSON 字符串,纯 Node 很可能只会将其发送为 [object Object],我确定这不是您的意图。

    如前所述,Express 允许您发送一个实际的 JS 对象,并为您进行 JSON 字符串转换。或者,您可以手动转换它。

    【讨论】:

    • 所以如果我理解正确的话,协议是总是发送一个字符串而不是一个对象?而res.json() 在内部进行转换?另外,如果我从服务器发送一个字符串,我会在浏览器上要求JSON.parse(data)
    • 是的。如果您使用 jQuery 的 $.getJSON() 方法,它也会在内部执行 JSON.parse()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2022-01-15
    相关资源
    最近更新 更多