如何在Flask中解析JSON数据?代码运行问题求助
解决你的JSON数据传输问题
我帮你排查了下代码,问题出在客户端的请求方式上——你直接把字典作为data参数传给requests.post,但这时候requests默认会把数据编码成application/x-www-form-urlencoded格式,而不是JSON,所以Flask服务端的request.is_json会返回False,自然也没法正确解析到JSON数据。
修改后的客户端代码
import requests url='http://127.0.0.1:8090/postjson' # 使用json参数自动完成序列化+设置请求头 hj=requests.post(url, json={ "device":"TemperatureSensor", "value":"20", "timestamp":"25/01/2017 10:10:05" }) print(hj.text) # 也可以手动处理(备选方案) # import json # payload = { # "device":"TemperatureSensor", # "value":"20", # "timestamp":"25/01/2017 10:10:05" # } # hj = requests.post(url, data=json.dumps(payload), headers={'Content-Type': 'application/json'}) # print(hj.text)
为什么这样改?
- 用
json参数时,requests会自动帮你把字典序列化为JSON字符串,同时自动设置请求头Content-Type: application/json,这样Flask服务端就能正确识别这是JSON请求,request.is_json会返回True,request.get_json()也能拿到完整的JSON数据。 - 如果选手动处理的方式,需要用
json.dumps()把字典转成JSON字符串,同时显式设置请求头告诉服务端数据格式是JSON。
可选优化:让服务端返回JSON响应
如果你想让服务端也返回结构化的JSON响应,可以修改服务端代码:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/postjson', methods = ['POST']) def postJsonHandler(): print(request.is_json) content = request.get_json() print(content) # 返回JSON格式的响应 return jsonify({"status": "success", "received_data": content}), 200 app.run(port=8090, debug=True)
这样客户端就能拿到更清晰的响应结果,调试起来更方便。
内容的提问来源于stack exchange,提问作者Aaditya Ura
相关产品推荐
相关产品推荐

