繁体   English   中英

$ .param序列化对象为JSON

[英]$.param serialized object to JSON

我使用$ .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 =优先级+规则和行%5B0%5D%5BSegment%5D = HH + wo + TV&rows%5B0%5D%5BValue%5D = 6&rows%5B0%5D%5BCampaignType%5D = CampaignType%3F&rows%5B0%5Dtype%5BCamp 5D = Predefined + Contract&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 = Predefined + Contract&rows%5B1%5D%5BChannel%5D = SMART + WIND + STORE + MALL&rows%5B1%5 %% Pri 2'

这是表单编码的数据,您可以在Python中使用urllib.parse.parse_qs进行解析。

>>> from urllib import parse
>>> parse.parse_qs('name=Priority+Rules&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=Predefined+Contract&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=Predefined+Contract&rows%5B1%5D%5BChannel%5D=SMART+WIND+STORE+MALL&rows%5B1%5D%5BPriority%5D=2')

{'name': ['Priority Rules'],
 'rows[0][Segment]': ['HH wo TV'],
 'rows[0][Value]': ['6'],
 'rows[0][CampaignType]': ['CampaignType?'],
 'rows[0][CampaignSubtype]': ['Predefined Contract'],
 'rows[0][Channel]': ['WIND STORE'],
 'rows[0][Priority]': ['1'],
 'rows[1][Segment]': ['HH wo TV'],
 'rows[1][Value]': ['6'],
 'rows[1][CampaignType]': ['CampaignType?'],
 'rows[1][CampaignSubtype]': ['Predefined Contract'],
 'rows[1][Channel]': ['SMART WIND STORE MALL'],
 'rows[1][Priority]': ['2']}

我不了解Falcon,但我确信它可以直接访问此数据,而无需访问原始流或传递给parse_qs 在Django或Flask中,您可以通过request.POST来获取它,这是一个字典; 浏览Falcon文档,看起来req.params可能做类似的工作,尽管您可能需要先将auto_parse_form_urlencoded选项设置为True。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM