python转换json

import json
import os
from enum import Enum


class 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/semantic
    feature = []
    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 feature


def 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 properties


def 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 properties


def 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 properties


def 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_properties


def 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_properties


def 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/semantic
    boundary_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.mfbz.cn/a/435767.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

俄罗斯套娃 (Matryoshka) 嵌入模型概述

在这篇博客中,我们将向你介绍俄罗斯套娃嵌入的概念,并解释为什么它们很有用。我们将讨论这些模型在理论上是如何训练的,以及你如何使用 Sentence Transformers 来训练它们。 除此之外,我们还会告诉你怎么用这种像套娃一样的俄罗斯…

【Vue】vue3 在图片上渲染 OCR 识别后的文本框、可复制文本组件

需求 后面返回解析后的文本和四角坐标,在图片上渲染成框,并且可复制。图片还可以缩放、拖拽 实现 这里要重点讲下关于OCR文本框的处理: 因为一些文字可能是斜着放的,所有我们要特殊处理,根据三角函数来计算出它的偏…

分布式ID生成策略-雪花算法Snowflake

分布式ID生成策略-雪花算法Snowflake 一、其他分布式ID策略1.UUID2.数据库自增与优化2.1 优化1 - 共用id自增表2.2 优化2 - 分段获取id 3.Reids的incr和incrby 二、雪花算法Snowflake1.雪花算法的定义2.基础雪花算法源码解读3.并发1000测试4.如何设置机房和机器id4.雪花算法时钟…

短剧系统开发:一种新型的娱乐方式

一、引言 随着科技的快速发展,人们的生活方式也在逐渐改变。在娱乐领域,短剧作为一种新型的娱乐方式,正在受到越来越多人的喜爱。短剧以其短小精悍、情节紧凑、易于观看等特点,迅速占领了市场。因此,开发一款短剧系统…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘数码管模块概述TM1638键盘数码管…

pytorch什么是梯度

目录 1.导数、偏微分、梯度1.1 导数1.2 偏微分1.3 梯度 2. 通过梯度求极小值3. learning rate3. 局部最小值4. Saddle point鞍点 1.导数、偏微分、梯度 1.1 导数 对于yx 2 2 2 的导数,描述了y随x值变化的一个变化趋势,导数是个标量反应的是变化的程度&…

NoSQL--3.MongoDB配置(Linux版)

目录 2.2 Linux环境下操作 2.2.1 传输MongoDB压缩包到虚拟机: 2.2.2 启动MongoDB服务: 2.2 Linux环境下操作 2.2.1 传输MongoDB压缩包到虚拟机: (笔者使用XShell传输) 如果不想放在如图的路径,删除操作…

基于springboot+vue实现学校田径运动会系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现学校田径运动会系统演示 摘要 随着互联网普及率的提高,互联网与人们日常生活的关系越来越密切,越来越多学校也正在着力建设自己的信息化管理系统,学校根据自身的发展及社会发展的需要,开始将传统的运动会成…

Golang模糊测试实践

模糊测试可以简单快速的自动化构建测试用例,尽量遍历各种可能的输入场景,从而保证函数代码覆盖尽可能多的边缘场景。Go原生内置了模糊测试的支持,如果善加利用,可以有效提升Go代码的质量。原文: Fuzz Testing in Golang 题图由Lex…

Hadoop配置日志的聚集——jobhistory不显示任务问题

问题: 一开始job history是正常的,配置了日志的聚集以后不管做什么任务都不显示任务,hdfs是正常运行,而且根据配置步骤都重启过了。 下面先po出日志聚集的操作步骤,再讲问题 1.配置yarn-site.xml cd $HADOOP_HOME/e…

0基础跨考408|一战上岸复盘及经验分享

基础阶段‼️ 王道的四本书的选择题部分要都做完、订正完。 王道的四门视频课要一轮刷完(或者题主在B站看了其他的老师,这其实也是算一轮的,只要题主是认真学习了的,题主说自己不知道看什么课,王道就好了)…

kibana配置 dashbord,做可视化展示

一、环境介绍 这里我使用的kibana版本为7.17版本。 语言选择为中文。 需要已经有es,已经有kibana,并且都能正常访问。 二、背景介绍 kibana的可视化界面,可以配置很多监控统计界面。非常方便,做数据的可视化展示。 这篇文章&…

【四】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

数据库学生选择1122 数据库展示 course表展示 SC表展示 student表展示 数据库学生选课1122_3 第十一题 第十二题 第十三题 第十四题 第十五题 数据库学生选课1122_4 第十六题 第十七题 第十八题 第十九题 第二十题 数据库学生选课1122_5 第二十一题 第二十二题 结尾 最后&…

恒驰上云规划实施解决方案上线华为云官网

华为云与伙伴共同打造联合解决方案 已成为更多企业的数字化转型利器 1月恒驰上云规划实施解决方案 完成上市宣讲并正式上架华为云官网 恒驰上云规划实施解决方案能力全景图:融合厂商云服务能力,一站式高效云迁移 从深入了解企业的本地IT环境、业务特点…

查看kafka消息消费堆积情况

查看主题命令 展示topic列表 ./kafka-topics.sh --list --zookeeper zookeeper_ip:2181描述topic ./kafka-topics.sh --describe --zookeeper zookeeper_ip:2181 --topic topic_name查看topic某分区偏移量最大(小)值 ./kafka-run-class.sh kafka.too…

Git——Upload your open store

0.default config ssh-keygen -t rsa #之后一路回车,当前目录.ssh/下产生公私钥 cat ~/.ssh/id_rsa.pub #复制公钥到账号 git config --global user.email account_email git config --global user.name account_name1. 上传一个公开仓库 查看当前分支: git branc…

JavaSE——基础小项目-模拟ATM系统(项目主要目标、技术选型、架构搭建、具体实现、完整代码注释)

目录 项目主要目标 技术选型 面向对象编程 使用集合容器 程序流程控制 使用常见API 系统架构搭建与欢迎页设计 Account ATM Test 用户开户功能实现 录入账户名称与性别 录入账户密码与取现额度 生成新卡号 存入账户 登录功能实现 登录后操作实现 退出账户 存…

python基础(11)《Allure报告中的组件用法》

使用 官方教程:https://docs.qameta.io/allure 入门 想要看到allure报告,需要做2个步骤: 1、pytest执行时关联allure:pytest命令带上--alluredir 结果存放目录或--alluredir结果存放目录; 2、打开执行报告&#xff…

通过勒索病毒攻击案例,思考勒索病毒攻击现象与趋势

前言 2019年针对企业的勒索病毒攻击越来越多,仿佛全球都在被勒索,基本上每天都会有关于勒索病毒攻击的案例被曝光,勒索病毒攻击已经成为全球最大的网络安全威胁,同时也被国际刑警组织认定为全球危害最大的网络犯罪组织活动&#…

nginx代理参数proxy_pass

proxy_pass参数用于配置反向代理,指定客户端请求被转发到后端服务器,后端地址可以是域名、ip端口URI 代理后端报错提示本地找不到CSS文件、JavaScript文件或图片 例如: nginx :10.1.74.109 后端服务:http://10.1.74.…