json与mat格式转换--python版

Posted 一颗小树x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json与mat格式转换--python版相关的知识,希望对你有一定的参考价值。

前言

本文分享json与mat格式之间相互转换,使用python实现json转为mat,实现mat转为json。

一、json转为mat

思路:

  1. xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
  2. xx.json文件,可以用python提供的 json库,对json文件进行读取,解析等操作。

代码如下:


from scipy.io import savemat
import json
import  os

# 定义一个函数,用于吧json文件转换为mat
def json_to_mat(json_name, mat_name):
    fin = open(json_name, encoding='UTF-8')
    s = json.load(fin)
    data = dict()
    for k,v in s.items():
        data[k] = v
    savemat(mat_name, data)
    fin.close()

# mat文件的路径
mat_path = r"./file_path_mat/"

# json文件的路径
json_path = r"./file_path_json/"

# 遍历文件夹中的json文件,把它们转换为mat文件
files = os.listdir(json_path)
for file in files:
    file_name = file.split(".")[0]
    json_name = json_path + file
    mat_name = mat_path + file_name + '.mat'
    # xxx.mat to xxx.json
    json_to_mat(json_name, mat_name)
    print(mat_name)

二、mat转为json

思路:(基本和上面一致)

  1. xx.mat文件通常是matlab工具产生的;这里可以使用 scipy.io库中的savemat,来保存mat文件。
  2. xx.json文件,可以用python提供的 json库,对json文件进行读取,解析等操作。
  3. 需要注意xx.mat文件中有多少个矩阵/数组,根据其名称,使用datas = mat['xxx'].tolist()提取数据;下面代码有两个矩阵/数组,名称分别为marks、slots。

代码如下:

import json
from scipy.io import loadmat
import os

def dataParse2Json(data='mat_name.mat', save_path='json_name.json'):
    mat = loadmat(data)

    # marks
    datas = mat['marks'].tolist()
    marks_list = []
    for i in range(len(datas)):
        one_data = datas[i]
        marks_list.append(one_data)

    # slots
    datas = mat['slots'].tolist()
    slots_list = []
    for i in range(len(datas)):
        one_data = datas[i]
        slots_list.append(one_data)

    # 生成json格式数据
    marks_slots =  
    marks_slots["marks"] = marks_list
    marks_slots["slots"] = slots_list
    return_json = json.dumps(marks_slots, ensure_ascii=False)
    print(return_json)

    # 把json数据写到对应目录文件
    with open(save_path, 'w') as f:
        f.write(return_json)

# mat文件的路径
path = r"./file_path_mat/"

# json文件的保存路径
save_path = r"./file_path_json/"

# 遍历文件夹中的mat文件,把它们转换为json文件
files = os.listdir(path)
for file in files:
    file_name = file.split(".")[0]
    mat_name = path + file
    json_name = save_path + file_name + '.json'
    # xxx.mat to xxx.json
    dataParse2Json(mat_name, json_name)
    print(mat_name)

xx.mat文件如下:

'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Jan 13 16:48:33 2023', '__version__': '1.0', '__globals__': [],
'marks': array([
        [ 86.16408269, 256.16925065,  14.14529143, 281.73859156,  0.        ],
        [ 38.53617571, 173.48191214,  13.63221104, 182.38779688,  0.        ],
        [389.13049096, 146.36046512, 495.88547895,  97.80638321,  0.        ],
        [340.17958656,  70.2881137 , 427.93077225,  33.45790747,  0.        ],
       [412.28294574, 459.24935401, 430.08704283, 497.468855  ,   0.        ],
       [287.92118863, 493.64728682, 290.56718346, 498.93927649,   0.        ]]),
'slots': array([
        [ 1,  2,  2, 80],
        [ 4,  3,  2, 80],
        [ 5,  6,  3, 99],
        [ 7,  5,  1, 90]]

转换好的json文件:


    "marks": [
        [86.16408268733855, 256.16925064599485, 14.145291433563306, 281.738591563921, 0.0], 
        [38.53617571059439, 173.48191214470285, 13.632211035125453, 182.3877968759421, 0.0], 
        [389.1304909560722, 146.36046511627916, 495.88547895419106, 97.8063832091313, 0.0], 
        [340.17958656330745, 70.28811369509049, 427.9307722538273, 33.45790747357878, 0.0], 
        [412.28294573643404, 459.2493540051679, 430.08704282524013, 497.4688549979153, 0.0], 
        [287.921188630491, 493.6472868217054, 290.5671834625323, 498.939276485788, 0.0]], 
    
    "slots": [
        [1, 2, 2, 80], 
        [4, 3, 2, 80], 
        [5, 6, 3, 99], 
        [7, 5, 1, 90]]

本文只供大家参考学习,谢谢~

以上是关于json与mat格式转换--python版的主要内容,如果未能解决你的问题,请参考以下文章

IplImage* 格式与Mat 格式的转换

python之 json模块

Python——json格式数据与字典相互转换

python的JSON与字典区别

将 python opencv mat 图像转换为 tensorflow 图像数据

Spark:将 JSON 文件转换为正确的格式