發送嵌套的json格式,對方接收報錯!
現在遇到的問題是我發json給後端,後端收到後報錯,後端說我發的json格式有問題,或者是序列化後出問題,我用js寫的,應該所有json格式都是一樣的,無論前端和後端用什麼語言。
問題分析如下:
前端和後端定義的JSON格式(用json工具檢測爲合法):
{
"ip": "192.168.0.1",
"userTxt": 1,
"userType": 0,
"mydata":
{
“neirong”:””,
”id”:”5”,
”zhanghao”:”ceshi”,
”mima”:”123456”
}
}
xx.js代碼如下(簡單的登陸界面獲取):
var zhanghao=window.document.getElementById("zhanghao").value; //獲取輸入賬號信息
var mima=window.document.getElementById("mima").value; //獲取用戶輸入密碼信息
//這個是定義的json格式,裏面還嵌套的json格式mydata
let data = {
"ip": "192.168.0.1",
"userTxt": 1,
"userType": 0,
"mydata": {“neirong”:”12345”,”id”:””}
}
//因爲用戶輸入的賬號和密碼都是變量,所以不能直接寫再json裏,會報錯
//我們想把賬號和密碼變量插入進去(知識點)
data .mydata.UserAccount = username;
data .mydata.UserPassword = password;
//然後對json進行序列化,js的序列化方法是:
var send = JSON.stringify(data); //json轉換爲字符串
console.log("發送數據(轉換後):" + sendStr); //打印出來轉換後發送的內容是不是字符串
ws.send(sendStr);
這裏發送給後端,問題來了,後端收到後他那裏報錯,他跟別的socket通信時OK的,,但是跟我webscoket通信出問題,是通信問題?還是我的json有問題?
他收到的內容是原內容,所以跟通信沒有關係,但爲何報錯,我反覆檢查了我寫的json格式都沒有問題,沒有問題,那是我序列化出問題了?Js序列化轉換就這樣啊!
網上在線json格式轉換生成自定義類型試試,注意看:private Mydata mydata;
在線轉換工具:https://www.bejson.com/json2javapojo/new/
發現我發送給後端接收的madata是對象Mydata類型(也就是嵌套的json格式序列出問題了,或者說是沒有序列化),因爲後端定義的mydata是String類型(private String mydata;),我們發過去的是對象,它定義的是String類,可js沒有定義啊,都是var和let來定義類的,這個問題可以後端可以把mydata修改成對象,可它還要和其他人通信,改了可能不方便,前端怎麼修改?我想到的是對於嵌套的json單獨提取出來先序列號再導入:
var zhanghao=window.document.getElementById("zhanghao").value; //獲取輸入賬號信息
var mima=window.document.getElementById("mima").value; //獲取用戶輸入密碼信息
/* 發送數據給後端處理 */
//先把mydata單獨提取出來
let mydata= {
"UserName":"",
"UserType":"1",
}
//把變量插進去,嵌套方式
mydata.zhanghao= zhanghao;
mydata.mima= mima;
//對mydata的嵌套進行序列化
var mysend = JSON.stringify(mydata);
let data = {
"ip": "192.168.0.1",
"userTxt": 1,
"userType": 0,
"mydata": mysend //這個把上面序列化後的mysend放進來
}
//對大的json序列化
var sendStr = JSON.stringify(data);
//這樣發送過去的json就不會報錯了。
console.log("發送數據(轉換後):" + sendStr);
ws.send(sendStr); //發送給後端
總結:對於json裏面還嵌套的json,單獨提取出來子json先序列化 JSON.stringify(xxxx),再放入主json裏。
最主要的是雙方間要相互溝通解決。