python转换json

import json
import os
from enum import Enumclass LaneDirectionType(int, Enum):LaneDirectionType_Unknown = -1  # 类型未知OneWay = 1  # 单向TwoWay = 2  # 双向# 颜色类型
class ColorCombo(int, Enum):NOUSE = 0  # 默认值UNKNOWN = 1000  # 未定义WHITE = 1  # 白色(默认值)YELLOW = 2  # 黄色ORANGE = 3  # 橙色BLUE = 4  # 蓝色GREEN = 5  # 绿色LEFT_WHITE_RIGHT_YELLOW = 6  # 左白右黄LEFT_YELLOW_RIGHT_WHITE = 7  # 左黄右白RED = 8  # 红色class LaneTurnType(int, Enum):NOUSE = 0  # 默认值UNKNOWN = 1000  # 未定义AHEAD = 1  # 直行LEFT = 2  # 左转RIGHT = 3  # 右转U_TURN = 4  # 掉头class ObjectLaneType(int, Enum):NOUSE = 0  # 默认值UNKNOWN = 1000  # 未分类VIRTUAL_WIRE = 1  # 虚拟线THICK_DASHED_LINE_SEGMENT = 2  # 粗虚线段SINGLE_DASHED_LINE = 3  # 单虚线SINGLE_SOLID_LINE = 4  # 单实线DOUBLE_DASHED_LINE = 5  # 双虚线DOUBLE_SOLID_LINE = 6  # 双实线LEFT_SOLID_RIGHT_DASHED_LINE = 7  # 左实右虚线RIGHT_SOLID_LEFT_DASHED_LINE = 8  # 右实左虚线FOUR_SOLID_LINE = 9  # 四实线class LongitudinalType(int, Enum):COMMON = 0  # 常规标线DISTANCE_CONFIRM_LINE = 1  # 白色半圆状车距确认线LOW_SPEED_LINE = 2  # 车行道纵向减速标线GORE_AREA_LINE = 3  # 导流区边线NO_PARKING_LINE = 4  # 禁停区边线PARKING_LINE = 5  # 停车位边线VARIABLE_GUIDANCE_LINE = 6  # 可变导向车道线# 路边条带枚举定义
class ObjectFenceType(int, Enum):NOUSE = 0  # 默认值UNKNOWN = 1000  # 未分类CURB = 1  # 路缘石GUARDRAIL = 2  # 护栏WALL = 3  # 墙体GEOGRAPHICAL_BOUNDARTES = 4  # 地理边界GREENBELTS = 5  # 绿化带OTHER_HARD_ISOLATION = 6  # 其它硬隔离PARKING_POST = 7  # 停车场柱子def read_data(input_data):#./data3转换/output/semanticfeature = []for _file_name in os.scandir(input_data):#会遍历该目录下的所有文件和子目录with open(_file_name, encoding='utf-8') as fh:feature_collection = json.loads(fh.read())#fh.read()会读取文件的所有内容作为字符串feature.append(feature_collection)return featuredef transform_line_properties(id="", groupid="", color=ColorCombo.NOUSE, color_tf=100, type=ObjectLaneType.NOUSE,type_tf=100,longitudinal_type=str(LongitudinalType.COMMON.value), aggregation_count=1,taskid="0", update_time=0):properties = {"id": str(id),"groupid": groupid,"color": color,# 置信度默认赋值 100"color_tf": color_tf,"type": type,# 置信度默认赋值 100"type_tf": type_tf,"longitudinal_type": longitudinal_type,# 聚类次数默认赋值 1"aggregation_count": aggregation_count,"taskid": taskid,"update_time": update_time}return propertiesdef transform_boundary_properties(id="", type=6, type_tf=100, aggregation_count=1, taskid="0", update_time=0):properties = {"id": str(id),"type": type,# 置信度默认赋值 100"type_tf": type_tf,# 聚类次数默认赋值 1"aggregation_count": aggregation_count,"taskid": taskid,"update_time": update_time}return propertiesdef transform_trajectory_properties(id=0,lanenode_id_s=-1,lanenode_id_e=-1,speed=0,turn_type=LaneTurnType.NOUSE,collect_num=1,direction=LaneDirectionType.LaneDirectionType_Unknown,taskid="0",update_time=0):properties = {"id": id,"lanenode_id_s": lanenode_id_s,"lanenode_id_e": lanenode_id_e,"speed": speed,"turn_type": turn_type,"collect_num": collect_num,"direction": direction,"taskid": taskid,"update_time": update_time}return propertiesdef transform_line(data):# if isinstance(data["properties"]["longitudinal_type"], list):#     longitudinal_type = ','.join([str(x) for x in data["properties"]["longitudinal_type"]])# elif isinstance(data["properties"]["longitudinal_type"], str):#     longitudinal_type = data["properties"]["longitudinal_type"]# else:#     longitudinal_type = ""new_properties = transform_line_properties(id=data["properties"]["id"],color=data["properties"]["color"],color_tf=data["properties"]["color_tf"],type=ObjectLaneType.SINGLE_DASHED_LINE)data["properties"] = new_propertiesdef transform_boundary(data):new_properties = transform_boundary_properties(id=data["properties"]["id"],type=ObjectFenceType.OTHER_HARD_ISOLATION)data["properties"] = new_properties#修改参数,可以改上层参数 
def transform_trajectory(data):new_properties = transform_trajectory_properties(id=data["properties"]["id"])data["properties"] = new_propertiesdef save_data(data_list, out_data_path):directory = os.path.dirname(out_data_path)if not os.path.exists(directory):os.makedirs(directory)# out_data_path = out_data_path + save_type + ".geojson"out_data= {"type": "FeatureCollection","features":data_list}with open(out_data_path, 'w', encoding='utf-8') as fp:fp.write(json.dumps(out_data, ensure_ascii=False))def transform_format(in_data_path,out_path):# 读取semantic数据   转成字典保存在list中返回semantic_features = read_data(os.path.join(in_data_path, "semantic"))#./data3转换/output/semanticboundary_data = []#道路边线line_data = []#车道线for data_features in semantic_features:for data_feature in data_features["features"]:#遍历list 包括几何信息,属性信息# 云端建图后续可能会有字段枚举值if data_feature["properties"]["type"] == 6:transform_boundary(data_feature)#只更新对象里的属性值,其他的保留boundary_data.append(data_feature)if data_feature["properties"]["type"] == 1:transform_line(data_feature)line_data.append(data_feature)out_boundary_data_path = os.path.join(out_path, "semantic", "Boundary.geojson")out_line_data_path = os.path.join(out_path, "semantic", "Line.geojson")save_data(boundary_data, out_boundary_data_path)save_data(line_data, out_line_data_path)
if __name__ == '__main__':# 用于确保该代码块只在作为主程序运行时才执行,而在被导入为模块时不执行in_data_path = "/home/linux/下载/557040098/output"out_path = "/home/linux/下载/557040098/output"transform_format(in_data_path, out_path)# # 读取trajectory数据# trajectory_features = read_data(os.path.join(in_data_path,"trajectory"))## for data_features in trajectory_features.items():#     for data_feature in data_features["features"]:#         transform_trajectory(data_feature)# out_trajectory_data_path = os.path.join(out_path, "trajectory", "Lane")# save_data(trajectory_features, out_trajectory_data_path)

json.load() 和 json.loads() 都是用于读取 JSON 格式数据的函数,其中 json.load() 用于读取文件(File)对象,而 json.loads() 用于读取字符串(str)对象。

具体来说,json.load() 的参数应该是一个打开的文件对象,而 json.loads() 的参数应该是一个字符串对象。json.loads() 会将这个字符串解码为 Python 对象,而 json.load() 则会将文件中的 JSON 数据解码为 Python 对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg maxrate 导致转码输出的内容包含随机性

https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate 问题 领导提出了一个问题,为什么转码后的视频大小字节数据都不一样,这问到我了,一时语塞。查一下吧,没有什么资料支撑。主动试一下。 尝试 首先尝试一下直接…

C#,动态规划的集合划分问题(DP Partition problem)算法与源代码

1 动态规划问题中的划分问题 动态规划问题中的划分问题是确定一个给定的集是否可以划分为两个子集,使得两个子集中的元素之和相同。 动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程…

云计算高级课程作业

1、openEuler 二进制方式安装MySQL 8.0.x。 2、备份数据库 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 实验操作: 1、openEuler 二进制方…

Python基础一

Python是一门简单的编程语言,适用于人工智能、web应用、爬虫程序、大数据等方面 一、Python语言特点 Python 是一种功能强大且流行的编程语言,具有许多特点,其中一些包括: 1. **易学易用** Python 的语法简洁清晰,类…

[赛码网、牛客刷题、ACM模式] python读取输入

文章目录 内容描述读取输入常用的字符串、列表处理手段 内容描述 在一些面试或笔试过程中,可能会遇到需要自己写读取输入,习惯了力扣刷题的话,会有些不习惯,面试过程中就非常麻烦了。 今天刚好有一位朋友遇到该问题,所…

【go语言开发】gorm库连接和操作mysql,实现一个简单的用户注册和登录

本文主要介绍使用gorm库连接和操作mysql,首先安装gorm和mysql依赖库;然后初始化mysql,配置连接池等基本信息;然后建表、完成dao、controller开发;最后在swagger中测试 文章目录 前言安装依赖库数据库初始化账号注册和登…

2403C++,C++20协程通道

原文 通道是一个可用来连接协程,实现不同协程间通信的并发安全队列. Test fun test know channel() runBlocking<Unit> {val channel Channel<Int>()//生产者val producer GlobalScope.launch {var i 0while (true) {delay(1000)channel.send(i)println("…

springBoot整合Redis(三、整合Spring Cache)

缓存的框架太多了&#xff0c;各有各的优势&#xff0c;比如Redis、Memcached、Guava、Caffeine等等。 如果我们的程序想要使用缓存&#xff0c;就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了&#xff0c;利用面向对象的抽象和多态的特性&#xff0c;做到业务代…

上市公司财务报表精讲系列一:黄山旅游

上市公司财务报表精讲系列一&#xff1a;黄山旅游 一、主营业务分行业、分产品、分地区情况二、董事会报告三、净利润现金流四、净资产收益率五、权益乘数和总资产周转率六、负债结构图七、行业分析八、案例总结九、2023年度业绩 一、主营业务分行业、分产品、分地区情况 二、董…

为国产信创服务器提供LDAP统一身份认证方案

金融信创作为 8 大行业信创之首&#xff0c;早已成为其他行业信创建设的参考。金融行业有着极为复杂的业务场景&#xff0c;对系统有着极高的稳定可靠需求&#xff0c;因此&#xff0c;在寻找微软 AD 国产化替代方案时&#xff0c;常会涉及到更深层次的场景。例如&#xff0c;最…

哪些行业将有可能被ai替代

随着AI技术的不断发展&#xff0c;越来越多的行业开始受到其影响&#xff0c;一些工作可能会被AI替代。以下是一些可能被AI替代的行业和领域&#xff1a; 制造业&#xff1a;制造业中的许多重复性劳动&#xff0c;如装配线上的工作&#xff0c;可能首先被AI和自动化技术替代。…

【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例

文章目录 火焰图perfperf listperf recordperf scriptperf statperf reportperf top 官方perf使用示例记录60s系统中发生的所有上下文切换事件监测整个系统的 CPU 使用情况抓取 CPU 事件数据统计 CPU 循环事件、指令数、缓存引用、缓存失效和总线周期等性能指标的命令以mysqld进…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

构建 LLM 支持的应用程序

LangChain 教程&#xff1a;构建 LLM 支持的应用程序的指南 一、引言 在当前的科技浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为引领人工智能发展的重要力量。许多企业和开发者都渴望利用LLM构建出功能强大的应用程序。然而&#xff0c;对于初学者来说…

【七】【SQL】自连接

自连接初见 数据库中的自连接是一种特殊类型的SQL查询&#xff0c;它允许表与自身进行连接&#xff0c;以便查询表中与其他行相关联的行。自连接通常用于处理那些存储在同一个表中的但彼此之间具有层级或关系的数据。为了实现自连接&#xff0c;通常需要给表使用别名&#xff…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

多重验证及比特币脚本中的P2PK、P2PKH、P2SH机制

在数字货币的世界中&#xff0c;安全性和有效性是核心要素。其中&#xff0c;二重验证作为一种强化账户安全的重要手段&#xff0c;以及比特币赎回脚本系统中的P2PK、P2PKH、P2SH等交易类型&#xff0c;对于理解区块链技术的底层逻辑和实现方式至关重要。本文将对这些概念进行深…

使用rust实现九九乘法表

rust目前拥有接近c/c的运行速度以及更快的编码支持&#xff0c;所以是很值得学习得一门语言。rust的语法及设计理念与其他的语言也有许多的不同之处。比如其特有的所有权属性。可以让开发者快速的开发出高效的运行程序。对于内存的管理也有极好的管理方案。 在这里使用rust语言…

在Java中,Scanner类是用来获取用户输入的

在Java中&#xff0c;Scanner类是用来获取用户输入的。以下是一个简单的示例&#xff0c;展示如何使用Scanner类从控制台读取用户输入&#xff1a; java import java.util.Scanner; // 导入Scanner类 public class Main { public static void main(String[] args)…