如何将Python生成的多边形坐标JSON重排为指定格式?
如何将多边形坐标序列重排为指定JSON格式?
我来帮你搞定这个JSON格式转换的问题!你的原代码是把每个多边形坐标直接转成字符串逐行写入,这和目标格式差得有点远,咱们一步步调整:
核心思路
- 先搭建好目标JSON的整体结构:包含
Message、Status、Result三个顶级字段 - 遍历每个多边形框,把一维的坐标序列拆成
[x,y]形式的顶点数组 - 把每个多边形的顶点对应到
Result下的索引键(比如"0"、"1"),每个顶点再用"0"-"3"作为子键存储坐标 - 最后一次性将完整的字典结构写入文件,而不是逐行输出字符串
完整实现代码
import json import numpy as np # 假设res_file是你的输出文件路径,boxes是输入的多边形列表 def generate_target_json(res_file, boxes): # 初始化目标JSON结构 target_data = { "Message": "success", "Status": 1, "Result": {} } # 遍历每个多边形框 for idx, box in enumerate(boxes): # 将box转成int32类型,再重排成N个[x,y]的顶点数组 poly = np.array(box).astype(np.int32).reshape((-1, 2)) # 构建当前多边形的顶点字典,键为"0"-"3" poly_dict = {str(i): list(vertex) for i, vertex in enumerate(poly)} # 将当前多边形添加到Result中,键为多边形的索引字符串 target_data["Result"][str(idx)] = poly_dict # 将完整结构写入文件,indent=4保证格式美观,ensure_ascii=False支持特殊字符 with open(res_file, 'w', encoding='utf-8') as f: json.dump(target_data, f, indent=4, ensure_ascii=False)
关键细节说明
reshape((-1, 2)):把一维的坐标序列(比如[x1,y1,x2,y2,x3,y3,x4,y4])自动拆分成4个[x,y]的顶点数组,完美匹配你的目标格式- 用字典推导式
{str(i): list(vertex)...}快速生成每个多边形的顶点键值对 - 最后一次性写入整个字典,避免原代码中逐行写入字符串导致的JSON格式错误
内容的提问来源于stack exchange,提问作者Ajinkya
相关产品推荐
相关产品推荐

