生成的json对象,用express发送post请求到服务端,JSON.stringify后保存到服务器后数据格式变得很奇怪?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成的json对象,用express发送post请求到服务端,JSON.stringify后保存到服务器后数据格式变得很奇怪?相关的知识,希望对你有一定的参考价值。

因为是要从unity发布webgl后发送数据到页面再上传服务器,总是无法生成工程,最后把所有要发送的数据打包成一个大字符串后才顺利生成。然后html上主要就是把字符串分解一下。其中Parameter实验参数是个嵌套对象,因为参数数量和名称可能不固定。

我设想的应该是生成一个这样的json


"ExperimentName": "ABCD Experiment",
"Parameter":
"P1": "1",
"P2": "2",
"P3": "3",
"P4": "4"

"xlabel": "XlabelName",
"ylabel": "YlabelName",
"Xdata": [
"1"
"2"
],
"Ydata": [
"1"
"2"
]


但服务器端保存的却是这样的···

"ExperimentName": "ABCD Experiment",
"Parameter[p1]": "1",
"Parameter[p2]": "2",
"Parameter[p3]": "3",
"Parameter[p4]": "4",
"xlabel": "xlabel",
"ylabel": "ylabel",
"xData[]": [
"1",
"2"
],
"yData[]": [
"1",
"2"
]

不知道问题出在哪,下面是代码

//页面代码
function sendToServer(expInfoStr)

var expInfo = expInfoStr.split('#');
sendJson = ;
sendJson.experimentName = expInfo[0];
sendJson.experimentParam = ;
var paramName = expInfo[1].split(',');
var paramValue = expInfo[2].split(',');
for(let i=0; i<paramValue.length; i++)
sendJson.experimentParam[paramName[i]] = parseFloat(paramValue[i]);

sendJson.xlabel = expInfo[3];
sendJson.ylabel = expInfo[4];
var xD = expInfo[5].split(',');
var yD = expInfo[6].split(',');
sendJson.xData = [];
sendJson.yData = [];
for(let i=0; i<xD.length; i++)
sendJson.xData.push(parseFloat(xD[i]));

for(let i=0; i<yD.length; i++)
sendJson.yData.push(parseFloat(yD[i]));

$.post("http://localhost:8000/saveJSON",sendJson,function(data, status)
alert("Data: " + data + "\nStatus: " + status);
);


服务器端node.js
var fs= require('fs');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();

// bodyParser.urlencoded解析form表单提交的数据
app.use(bodyParser.urlencoded(extended: false));

// bodyParser.json解析json数据格式的
app.use(bodyParser.json());

app.post('/saveJSON',function(req, res)

// 对象转换为字符串
var str_json = JSON.stringify(req.body, null, 4);

fs.writeFile('mydata.json', str_json, 'utf8', function()
// 保存完成后的回调函数
console.log("保存完成");
);

);

app.listen(8000);

参考技术A JSON.stringify之前数据就不对吧,
sendJson.experimentParam[paramName[i]] = parseFloat(paramValue[i]);应该是
sendJson.experimentParam.paramName[i]= parseFloat(paramValue[i]);
xData也是,存的格式是对象的不能用push

以上是关于生成的json对象,用express发送post请求到服务端,JSON.stringify后保存到服务器后数据格式变得很奇怪?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 express node.js POST 请求中接收 JSON?

Node.js/ Express POST 请求正文被解析为不正确的 JSON

nodejs 怎么获取post请求的json数据

在Express中作为POST请求的结果呈现视图

在 Express 中接收 Jquery POST 数据

express 4.x req.query(get方式) req.body(post方式) 接收浏览器发送过来的数据