使用jQuery提交JSON后收到编码字符串,如何将其转换回JSON格式?
问题根因
你收到的period=1&data%5B3%5D=Here是URL编码后的application/x-www-form-urlencoded格式表单串,并非JSON结构,所以直接调用JSON.parse()不会生效。
出现这个情况的原因是jQuery的$.ajax默认会把传入的data对象序列化为表单格式,而非JSON格式。
最优解决方案:前端调整提交逻辑直接发JSON
直接修改前端提交代码,明确指定发送JSON格式请求,从根源避免转换成本:
const post = { period: "1", data: {1: "Here"} } $.ajax({ url: 'http://127.0.0.1:5000/', // 手动将对象序列化为JSON字符串 data: JSON.stringify(post), type: 'POST', // 声明请求体格式为JSON contentType: 'application/json; charset=utf-8' })
修改后后端直接收到JSON结构数据,可直接用对应语言的JSON解析方法处理。
备选方案:后端将表单串转换为JSON
如果无法修改前端代码,可在后端先解析表单串再转为你需要的JSON结构,示例如下:
- Python(适配你端口5000大概率用的Flask框架)示例:
from urllib.parse import parse_qs import json # 你收到的原始表单字符串 raw_form_str = "period=1&data%5B3%5D=Here" # 解析URL编码的表单内容 parsed_form = parse_qs(raw_form_str) # 转换为目标结构 target_data = { "period": parsed_form["period"][0], "data": { # 键名和你收到的实际参数对应即可,这里你收到的是data[3]就写3 "3": parsed_form["data[3]"][0] } } # 可直接转为JSON字符串 json_result = json.dumps(target_data)
- Node.js示例:
const querystring = require('querystring') const rawFormStr = "period=1&data%5B3%5D=Here" const parsedForm = querystring.parse(rawFormStr) const targetData = { period: parsedForm.period, data: { 3: parsedForm['data[3]'] } } const jsonResult = JSON.stringify(targetData)
内容的提问来源于stack exchange,提问作者Michael Manders
相关产品推荐
相关产品推荐

