AngularJS动态构建嵌套JSON并POST时字段为空问题求助
解决AngularJS中构建嵌套JSON对象的问题
嘿,我一眼就看到问题出在哪了——你完全没必要用字符串拼接的方式把team和location对象塞进entry里!这正是导致它们变成null的核心原因。
错误原因分析
在JavaScript里,当你尝试把一个对象和字符串做拼接时,对象会被自动转换成字符串"[object Object]"。再加上你写的+ "\"{" + team + "}\"",前面的+号会试图把这个拼接出来的字符串转成数字,结果自然是NaN。而angular.toJson在处理NaN时会将其转为null,所以你的team和location字段就变成了null。
正确的写法
在JavaScript(包括AngularJS)中,构建嵌套JSON对象非常简单——直接把已定义的对象作为属性值赋值即可,不需要任何字符串拼接操作:
var team = { "id": "1", "teamName": "TeamName" }; var location = { "id": "1", "name": "Name" }; var entry = { "duration": "40", "dateTime": "949417200000", "team": team, // 直接赋值对象,无需字符串转换 "location": location // 同理,直接嵌套对象 }; // 现在再打印就能得到正确的嵌套JSON了 console.log(angular.toJson(entry));
优化建议(匹配目标JSON结构)
你最初要POST的JSON里,duration和dateTime是数字类型,而你当前代码里是字符串。如果需要严格匹配结构,可以把这两个字段改成数字:
var entry = { "duration": 40, // 去掉引号,转为数字 "dateTime": 949417200000, // 同样转为数字类型时间戳 "team": team, "location": location };
执行上述代码后,angular.toJson(entry)会输出完全符合你需求的嵌套JSON:
{"duration":40,"dateTime":949417200000,"team":{"id":"1","teamName":"TeamName"},"location":{"id":"1","name":"Name"}}
内容的提问来源于stack exchange,提问作者MikeJ
相关产品推荐
相关产品推荐

