如何在Python中正确动态生成合法的JSON字符串?
解决Python动态生成JSON数组时的转义问题
问题根源分析
你的初始代码之所以会输出带转义的长字符串,核心问题是手动拼接JSON字符串后又用json.dumps()处理——这相当于把拼接好的字符串当成了一个单一的JSON值,json.dumps()会自动转义字符串里的引号,最终导致输出不符合预期的数组结构。
看你的初始代码片段:
for x in testcase_ids: result_details = '{"case_id": ' + str(x) + ',"status_id": 1,"version":"1.0","comment":"Test"}' results.append(result_details) result_list = ','.join(results) json_string = json.dumps(result_list) data = {"results": [ json_string ]} print(json.dumps(data, indent=4, sort_keys=True))
这里result_list是一个类似"{"case_id":76565,...},{"case_id":76601,...}"的字符串,json.dumps(result_list)会把它转成带转义的JSON字符串,再放到data["results"]数组里,自然就不是你想要的对象数组了。
正确的解决方案:直接构造Python数据结构
处理JSON的最佳实践是先构造Python原生的字典和列表,最后一次性用json.dumps()序列化,json模块会帮你处理所有格式和转义问题,完全不需要手动拼接字符串。
简洁版实现
import json testcase_ids = [76565, 76601, 76668, 23467] # 用列表推导式快速生成字典列表 results = [ {"case_id": x, "status_id": 1, "version": "1.0", "comment": "Test"} for x in testcase_ids ] # 构造最终数据结构并序列化输出 data = {"results": results} print(json.dumps(data, indent=4, sort_keys=True))
你的修复代码优化
你后来的修复思路是对的(构造字典列表),但里面多了一步没必要的json.dumps()再json.loads(),可以简化成这样:
import json results = [] for x in mrc_testcase_ids: result_details = {"case_id": str(x),"status_id": 1,"version":"1.0","comment":"Test"} results.append(result_details) # 直接用Python数据结构序列化,无需额外转存 print(json.dumps({"results": results}, indent=4, sort_keys=True))
预期输出
运行上述代码后,会得到你想要的格式化JSON结构:
{ "results": [ { "case_id": 76565, "comment": "Test", "status_id": 1, "version": "1.0" }, { "case_id": 76601, "comment": "Test", "status_id": 1, "version": "1.0" }, { "case_id": 76668, "comment": "Test", "status_id": 1, "version": "1.0" }, { "case_id": 23467, "comment": "Test", "status_id": 1, "version": "1.0" } ] }
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

