这个JSON结构何时转换为所有string?

我正在向我的节点/快递服务器发送一个JSON结构,并将该对象保存到数据库中。 问题是我发送JSON与整数和布尔值,但一切都被保存为string。

这是我的节点/快速代码:

var express = require('express'); var app = express(); app.enable("jsonp callback"); app.use(express.bodyParser()); // allow cross origin scripting to get data from devices directly app.all('*', function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); app.post('/departures', function(req, res) { /* I started using this to convert back to integers - but need to solve the problem for (var i in req.body.data) { req.body.data[i].siteid = parseInt(req.body.data[i].siteid); } */ console.log('saving data '+JSON.stringify(req.body.data)); positionProvider.save(req.body.data, function(){ res.json({status:'success'}); }) }); 

这里是我如何使用jQuery发布:

  var data = [{"siteid":123}]; $.ajax({ type: 'POST', url: serverUrl + '/departures', data: { data: data }, success: function(resp) { alert('saved departure data '+JSON.stringify(data)) }, error: function(err) { console.log('error posting to server...'); console.log(err); } }); 

jquery方面报告它发送{“siteid”:123},但节点端报告它收到{“siteid”:“123”}。

整数转换为string在哪里?

您的数据将转换为string,作为从客户端发送到服务器的产品。 请记住,客户端和服务器实际上并不是以JSON进行通信,而是以文本或二进制数据进行通信。 服务器(Express?)隐式地将发送的数据解释为一个string,如果包含content-type: application/json请求头,则将该string转换为JSON。 如果希望数据以特定格式保存,则需要明确地在服务器上键入检查和转换。

TLDR(评论); 不要依靠客户端发送有效的数据。 在将其保存到数据库之前清理它。

我遇到了同样的问题。 jQuery $ .post和$ .ajax在将JSONstring化时将整数转换为string。 您可以通过查看服务器端的数据来validation它。 服务器接收类似{“age”:“3”},而你真的想要{“age”:3}。

该解决scheme的作用是避免给jQuery纯对象,而是给它一个string:

$.ajax({ type:'POST', url: '/api/...', data: JSON.stringify(data), contentType: 'application/json' })