第一种情况:前端采用jquery,js中产生一个变量
var mydata1={"G2":{"fs1":1,"fs2":2}}
$('#calculate').bind('click', function() {
console.log(mydata1);
$.getJSON('/pile_calculate',mydata1,function(data) {$(".Rsk").text(data.result);});
return false;
});
后端采用flask
@app.route('/pile_calculate',methods=['GET','POST'])
def pile_calculate():
fs=request.args.get('G2')
print('start')
print(fs) #out None
print(type(fs)) #out <class 'NoneType'>
print('end')
return jsonify(result=fs)
第二种情况,前端采用jquery,js中产生一个变量
var mydata2={"fs1":1,"fs2":2}
$('#calculate').bind('click', function() {
console.log(mydata2);
$.getJSON('/pile_calculate',mydata2,function(data) {$(".Rsk").text(data.result);});
return false;
});
后端采用flask,
@app.route('/pile_calculate',methods=['GET','POST'])
def pile_calculate():
fs=request.args.get('fs1')
print('start')
print(fs) #out 1
print(type(fs)) #out <class 'str'>
print('end')
return jsonify(result=fs)
为什么第一种情况字典里面嵌套字典就会出错啊,第二种情况就是对的啊,麻烦各位有经验的牛人帮忙解答以下啊,谢谢!
经过多日baidu之后解决问题,主要查阅了:
jQuery ajax - getJSON() 方法
http://www.w3school.com.cn/jquery/ajax_ajax.asp
werkzeug官方文档reference->Data Structures
flask处理json的多种情况
第一步:首先我们了解一下jQuery的ajax方法。
getJSON函数的定义:通过HTTP GET请求载入JSON 数据。(这个从其名字叫做getJSON即可知道)
上述函数等同于
示例1:
示例2:
那么问题来了,
question:为什么flask对于mydata1可以正常解析,对于myata2则不能解析呢?
第二步:我们了解一下flask的request.args方法。
request.args返回值类型为ImmutableMultiDict,一个类似dict的数据类型,dict具有的方法,它均具备,同时可用to_dict()方法将其转换成dict类型。
现直接引用http://werkzeug.pocoo.org/docs/0.11/datastructures/#http-related上关于MultiDict的介绍,方便大家了解:
answer:因为前端get请求时将发送到服务器的数据mydata2由{"G1":{"fs1":1,"fs2":2}}转换成G1[fs1]=1&G1[fs2]=2
也就意味着后端flask中request.args=ImmutableMultiDict([('G1[fs1]', '1'), ('G1[fs2]', '2')])
并非我们期望的request.args= ImmutableMultiDict([("G1", "{fs1:1}"), ("G1", "{fs2:2}")])
故后端flask语句应改成
修改后,虽然可以正常显示,但明显不利于编程,特别对于字典嵌套多层字典的情况,更为不利。
第三步:改进
以上是本人的浅见,有改进或不对的地方,欢迎大家喷水。
另外,由于本人是segment新手,排版比较乱,望同学们见谅。