前端给后端传输json数据格式问题

后端同事说前端切图仔你给我传个json回来,我说好的没问题。啪地一下,很快啊,我就把json传过去了(传的是json字符串)。原数据对象如下:

let obj = {

member: [

{id: 1, userid: 8191451, check: true},

{id: 1, userid: 8200249, check: true},

{id: 1, userid: 8181572, check: true},

{id: 1, userid: 8190718, check: true}

],

users: [8191451, 8200249, 8181572, 8190718]

}

使用JSON.stringfy()将obj转换为json字符串,数据如下:
"{"member":[{"id":1,"userid":8191451,"check":true},{"id":1,"userid":8200249,"check":true},{"id":1,"userid":8181572,"check":true},{"id":1,"userid":8190718,"check":true}],"users":[8191451,8200249,8181572,8190718]}"
为了好看,将json字符串写在代码块里

"{"member": [

{"id":1, "userid":8191451, "check":true},

{"id":1, "userid":8200249, "check":true},

{"id":1, "userid":8181572, "check":true},

{"id":1, "userid":8190718, "check":true}],

"users": [8191451,8200249,8181572,8190718]

}"

过了一会儿...后端说你这不对啊你怎么给我字符串,你懂不懂json是啥啊!我说懂啊,我传的不就是json字符串么?后端说我不要json字符串,我要json,我要的是这样的...

{"member": [

{"id":1, "userid":8191451, "check":true},

{"id":1, "userid":8200249, "check":true},

{"id":1, "userid":8181572, "check":true},

{"id":1, "userid":8190718, "check":true}],

"users": [8191451,8200249,8181572,8190718]

}

所以问题就是,前端给后端传json数据不是传json字符串吗?应该传什么格式? 图2/图3?
ps: 感谢回答

回答

1、把JSON.stringfy()这个去掉,一般框架都会自动把输出的object转成json字符串,前端接收后也会自动将json字符串转成object
2、json就是一个字符串, 一种数据格式,你同事其实想要的是object,一般的http请求库都会自动把json转成object
3、JSON.stringfy()需要转的是所有数据,不然前端没法自动转,如:

    JSON.stringfy({

code: 200,

data: {members: []}

})

// 而不是

{

code: 200,

data: JSON.stringfy({

members: []

})

}

肯定默认都是byte,后端要自己处理一次(有的框架会自动处理),不处理解析他使用个鬼。

除非是你把json再字符串了一下,那后端解析完也是字符串啊。

请求header里面需要指定格式为application/json.
JSON.stringify之后的结果不要动(不要管好不好看), 或者直接不使用JSON.stringify一般请求库会自动转。

楼上说的是 让你传递json数据,不是让你搞一个json格式的字符串,这两玩意,接口仔表示差距很大,指定contentType就行了

  1. 检查下前端的请求报文头content-type的取值,上送JSON数据时content-type:application/json
  2. 检查下前端的请求体是不是一个JSON对象(F12看下,浏览器会自动转成JSON对象展示的)。

前端给后端传输json数据格式问题

如果上述都没有问题,那就找后端同事看看接口为啥没有自动解析

前端给后端传输json数据格式问题
各位热心回答的朋友,请求已指定Content-Type,后端同事要的是图中attribute为json,我就使用JSON.stringfy()转换了,传过去他又说不是,好像他的意思是要对象... 应该是我们互相理解有误吧?

你2次字符串化了。去掉JSON.stringfy()就好了

{

"a": {

"b":"c"

}

}

{

"a": "{\"b\":\"c\"}"

}

这两不是一个东西

你是转错了吧,设置Content-Type为json;
并不是要转 obj
obj= {
number: JSON.stringify(number),
users: JSON.stringify(users)
}

这个还是和后端约定一下,
//后台使用对象的形式接受
$.ajax({
url: "testJsonOne",
type: "post",
data: obj,
contentType: 'application/json;charset=utf-8',
success : function(data){
}
});

以上是 前端给后端传输json数据格式问题 的全部内容, 来源链接: utcz.com/a/69642.html

回到顶部