python转换json

news2025/1/18 6:10:18
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.coloradmin.cn/o/1496521.html

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

相关文章

【YOLO v5 v7 v8 v9小目标改进】辅助超推理SAHI:分而治之,解决高分辨率图像中小物体检测的问题

辅助超推理SAHI:分而治之,解决高分辨率图像中小物体检测的问题 设计思路结构小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 论文:https://arxiv.org/pdf/2202.06934.pdf 代码:https://github.com/obss/sahi 设计思…

造极宋韵:大麗和和全新城市系列

中国美学,造极于宋。杭州,一座生活在宋画里的城市,一座繁华与优雅交织的华贵天城。 钱塘自古繁华,温润华贵的丝绸与漆器,诉说这座城市底蕴深藏的华贵;湖上雨霁,山水涳濛,油纸伞与石拱桥,描绘杭州空灵雅逸的自然山水;比德于玉,谦和含章,玉琮与礼玉文化,象征玉成和合的城市气质。…

管理类联考--复试--面试问题--底层逻辑

文章目录 了解面试官提问问题的背后逻辑,在面试时遇到,即使不懂,也能往边边靠近哈一句顶一万句自我介绍 了解面试官提问问题的背后逻辑,在面试时遇到,即使不懂,也能往边边靠近哈 “你最有挑战性的事是啥”…

开源工业软件:SCADA系统开源

PyScada是一个开源的scada系统 源代码地址 http://www.gitpp.com/huangtomy/pyscada-cn SCADA系统是Supervisory Control And Data Acquisition的缩写,即数据采集与监视控制系统。它是以计算机为基础的DCS与电力自动化监控系统,应用领域非常广&#x…

nginx代理参数proxy_pass

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

Github 2024-03-07 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4C++项目3C#项目1TypeScript项目1非开发语言项目1HTML项目1CSS项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Pyt…

vscode中eslint插件不生效问题

case: 最近使用webpack打包js资源中使用到了VS Code中的eslint插件辅助eslint plugin对代码进行校验,在.eslintrc.js文件中以及webpack.config.js配置好后, 在控制台运行npx webpack可以读取到eslint plugin的检测结果 一、eslint插件读取项目中.eslint…

下载无水印抖音视频

在抖音看到某些视频想下载,却出现无法保存在本地【显示"作品暂时无法保存,链接已复制"】。或者下载的视频有水印。 而某些微信小程序下载可能需要付费或者有水印。其实我们可以直接使用电脑浏览器直接下载。 举个例子: 这是来自王道官方账号的一条视频链…

小程序环形进度条爬坑

在做微信小程序的时候,发现用canvas做的环形进度条,在带滚动条的view里面显示有闪动、显示不全的问题,后面改成echart-weixin的pie图实现了,option配置如下 // 表示进度的百分比 var progressValue 70;option {series: [{type: …

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.M…

Sqoop “hcatalog does not exist!” 提示信息消除方法

sqoop运行的时候老是有这个报错提示,看着可烦,解决消除一下 解决方法: 1、在$SQOOP_HOME/bin目录下面修改configure-sqoop文件 1)进文件夹 cd /training/sqoop-1.4.7/bin2)编辑文件 vi /configure-sqoop3&#xff…

区块链媒体套餐:精益求精链游媒体宣发推广7个关键细节分享-华媒舍

在如今竞争激烈的游戏行业,一款优秀的游戏缺乏有效的宣发推广,很难脱颖而出。而随着区块链技术的兴起,链游媒体的宣发推广成为游戏开发者和运营商的重要选择之一。本文将为大家介绍精益求精的链游媒体宣发推广的七个关键细节。 1. 定位目标受…

openGauss基于存储复制的资源池化安装部署流程

第一步:在主存储上创建资源池化需要的lun,以及远程同步复制xlog卷对应的lun,并且所有lun全部映射到业务计算节点上 1. 登录主集群DeviceManager,选择服务->LUN组->创建 来创建主集群LUN组; 2.登录主集群Device…

通过docker安装Mongodb

通过Docker安装MongoDB非常简单和方便,以下是基本步骤: 拉取MongoDB镜像: 首先确保你已经在本地机器上安装了Docker。然后,在命令行中执行以下命令来从Docker Hub下载官方的MongoDB镜像(这里以最新版本为例&#xff09…

【洛谷 P8748】[蓝桥杯 2021 省 B] 时间显示 题解(数学+模运算+输入输出)

[蓝桥杯 2021 省 B] 时间显示 题目描述 小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。 现在,小蓝要在客户端显示…

Transformer中的位置编码

在Transformer模型中,位置编码是一种特殊的编码方式,用于向模型提供关于输入序列中单词位置的信息。由于Transformer模型没有循环结构,无法像循环神经网络那样从输入序列中推断单词的位置顺序,因此需要引入位置编码来帮助模型理解…

window环境下使用k8s部署.net core项目

前提:已经部署镜像到Docker 在项目发布目录下新建.yaml文件,内容如下(以下仅举例出两种方式内容,可按需自由配置) --方式一(创建deployment 、服务、指定命名空间) # ------------------- 注意层级结构,…

多线程系列(十五) -常用并发工具类详解

一、摘要 在前几篇文章中,我们讲到了线程、线程池、BlockingQueue 等核心组件,其实 JDK 给开发者还提供了比synchronized更加高级的线程同步组件,比如 CountDownLatch、CyclicBarrier、Semaphore、Exchanger 等并发工具类。 下面我们一起来…

嵌入式工程师必备知识点

嵌入式工程师必备知识点 一、基础知识与理论二、编程语言与工具三、嵌入式操作系统四、通信协议与接口技术五、设计与测试 嵌入式工程师作为现代电子工程领域的核心角色,其职责涵盖了从硬件设计、软件开发到系统测试等多个方面。为了胜任这一职位,嵌入式…

一次一对一服务引起的沉思和笑话

前情提要 客户需求: 分析页面代码和接口请求协议和参数需求,将人工下载视频怎么获得最终的视频链接,这一逻辑清晰的展示并讲解清除。我询问了是否需要成品爬虫,他说代码他自己能搞定。 我给的价格选择: 第一种、首…