前端给后端传输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就行了
回答:
- 检查下前端的请求报文头
content-type
的取值,上送JSON数据时content-type:application/json
; - 检查下前端的请求体是不是一个JSON对象(F12看下,浏览器会自动转成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/161043.html