我有以下格式的帖子数据
{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}
服务器上的格式相同,但是收到了以下格式
{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[["-102.038635","36.800488"],["-94.567716","36.800488"],["-96.149793","43.381098"],["-104.060178","43.508721"]]}}}
您可以看到coordinates
属性的区别。将双引号添加到服务器接收的coordinates
数组中的每个值中。如何获得与客户发布数据相同的coordinates
数组?
我的应用程序配置了expressJS并使用body-parser。要解决此问题还需要其他设置吗?
app.use(bodyParser.urlencoded({ limit: '50mb' }));
app.use(bodyParser.json({ limit: '50mb' }));
谢谢。
答案 0 :(得分:0)
首先,从@bumblebeen开始,HTTP将所有内容都理解为字符串,并将所有内容都转换为字符串。您可以使用Number.parseInt
它也无关紧要,但是express现在附带了它自己的身体解析器,您可以使用它。因此,您无需致电bodyParser.json
,只需致电express.json
按照说明,您可以拥有一个名为parseCoordinates
的函数
function parseCoordinates(coordinates) {
return coordinates.map(inner => {
return Array.isArray(inner) ? inner.map(elem => parseFloat(elem)) : parseFloat(inner);
});
}
答案 1 :(得分:0)
{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}
上面实际上是一个JavaScript对象。
{"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[["-102.038635","36.800488"],["-94.567716","36.800488"],["-96.149793","43.381098"],["-104.060178","43.508721"]]}}}
上面实际上是一个JSON。
作为建议的答案之一,每当您将数据发送到服务器时,有效负载中的所有内容都会自动转换为字符串。您应该将值转换为数字。
此外,我认为任何解析都无法做到,您应该为此编写自己的代码。我之所以这样说,是因为解析器永远不会知道原始值是客户端发送的字符串还是实际上是数字,因为所有键和值都将变成字符串。
答案 2 :(得分:0)
假设我有
var payload = {"geoJSON":{"type":"Feature","geometry":{"type":"LineString","coordinates":[[-102.038635,36.800488],[-94.567716,36.800488],[-96.149793,43.381098],[-104.060178,43.508721]]}}}
在发送服务器之前,使用JSON.stringify(payload)对其进行字符串化。
payload = JSON.stringify(payload)
// after this code then sending payload to server
在使用JSON.parse(payload)的服务器中使用此
// server nodejs
var receivedContent = JSON.parse(payload)
// then you can using receivedContent with format you want