AWS Lambda传递的Python字典如何转换为JS可用对象格式
解决方案
这个是Python后端对接JS前端的高频场景,绝大多数全栈开发者都遇到过,核心要先理清两个概念的差异:
标准JSON规范要求对象的键必须包裹双引号,而JS对象的键只要是合法标识符(字母、下划线、$开头,后续可以带数字)就可以省略引号,二者的语义是完全兼容的,不需要强制修改后端输出格式也能正常使用。
推荐方案:前端直接解析标准JSON
这是最稳妥、无风险的方案,不需要修改Lambda侧的代码:
- Lambda侧正常用
json.dumps(py_dict)返回标准JSON响应,设置正确的Content-Type: application/json响应头 - 前端收到响应后直接调用
JSON.parse()即可得到可正常操作的JS对象,不管键有没有包裹引号,你都可以用obj.x、obj.y的方式直接访问属性,和无引号键JS对象的使用体验完全一致。
示例代码:
// 前端请求示例 fetch('你的Lambda接口地址') .then(res => res.json()) // 内置方法自动完成JSON解析,等价于得到你要的js_obj .then(js_obj => { console.log(js_obj[0].x) // 输出hi,完全正常使用 })
特殊场景方案:Python侧直接输出JS对象格式
如果你需要把数据直接嵌入HTML的<script>标签作为JS代码使用,不想走解析流程,可以用正则安全处理JSON输出:
import json import re py_dict = [{'x':"hi", 'y':1, 'z':2}] json_str = json.dumps(py_dict) # 正则仅匹配符合JS标识符规则的键,不会修改值内的引号 js_obj_str = re.sub(r'"([a-zA-Z_$][a-zA-Z0-9_$]*)":', r'\1:', json_str) print(js_obj_str) # 输出: [{x:"hi", y:1, z:2}]
注意不要手动拼接字符串生成JS对象,会存在特殊字符转义漏洞,正则方案依赖
json.dumps先完成所有特殊字符转义,再修改键的格式,安全性更高。
内容的提问来源于stack exchange,提问作者Juan Sebastian
相关产品推荐
相关产品推荐

