【发布时间】:2019-04-19 15:39:11
【问题描述】:
我使用 $.fileDownload 将数据从客户端发送到服务器 (Python)。 API 接收数据,但在 jQuery fileDownload docs 状态下,数据使用 $.param 进行序列化。问题是我需要 JSON 格式 的数据,以便我可以处理它并使用它的 key:value 对 创建一个文件。我一直试图弄清楚这一点,但似乎没有做任何事情来“反序列化”它。似乎我一开始就无法让 $.fileDownload 将数据作为 JSON 对象发送。有什么办法可以把序列化的数据转成 JSON?
这是我的 JavaScript 请求:
let data = {
'name': item.Name,
'rows': item.rows
}
window.$.fileDownload('/api/export-report-excel', {
httpMethod: 'POST',
encodeHTMLEntities: true,
data: data
})
在我的 API 中,我尝试了 json 方法(json.dumps 等),但无法转换序列化对象。
$.fileDownload 声明:
// 数据必须是对象(将被 $.param 序列化)或已经是 key=value 参数字符串
编辑:
在我的Falcon API中:
@route('/api/export-report-excel')
class ExportReportToExcel(object):
def on_post(self, req, resp):
data = req.stream.read()
log.info(data)
log.info(data) 输出:
b'name=优先级+规则&rows%5B0%5D%5BSegment%5D=HH+wo+TV&rows%5B0%5D%5BValue%5D=6&rows%5B0%5D%5BCampaignType%5D=CampaignType%3F&rows%5B0%5D %5BCampaignSubtype%5D=预定义+合同&rows%5B0%5D%5BChannel%5D=WIND+STORE&rows%5B0%5D%5BPriority%5D=1&rows%5B1%5D%5BSegment%5D=HH+wo+TV&rows%5B1%5D%5BValue %5D=6&rows%5B1%5D%5BCampaignType%5D=CampaignType%3F&rows%5B1%5D%5BCampaignSubtype%5D=预定义+合同&rows%5B1%5D%5BChannel%5D=SMART+WIND+STORE+MALL&rows%5B1%5D%5BPriority %5D=2'
【问题讨论】:
-
你还没有真正解释清楚你在做什么。什么在处理这个请求?您的服务器不仅仅是“Python”,大概它正在运行某种框架 - 哪个?您需要显示服务器端代码以及您尝试解码此参数的内容。
-
它正在运行 falcon 来处理请求。正如我所提到的,我尝试了 json.(methods) 但它不起作用。问题是数据通过$.param序列化,然后通过服务器发送。
-
不,这不是问题所在。但是您需要显示您的 Falcon 代码。 什么你试图传递给 json 方法?你真的需要一个 JSON 字符串还是一个字典?您希望如何处理这些数据?
-
我尝试了转储和加载。我正在使用 req.stream.read() 读取数据。这就是我试图在转储和负载中传递的内容。我没有发布我的 Falcon 代码,因为我一直在更改它,我无法设法将数据转换为 json。
-
@DanielRoseman 发布了我在 API 中获得的信息。我试图用泡菜反序列化它,但它没有用。我找不到将其转换回对象的方法。
标签: javascript python jquery json serialization