前端Js发送嵌套的json格式给后端报错

发送嵌套的json格式,对方接收报错!

 

现在遇到的问题是我发json给后端,后端收到后报错,后端说我发的json格式有问题,或者是序列化后出问题,我用js写的,应该所有json格式都是一样的,无论前端和后端用什么语言。

 

问题分析如下:

json工具检查推荐:https://www.sojson.com/

前端和后端定义的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里。

最主要的是双方间要相互沟通解决。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值