Matlab 导入与导出json文件

今天看着以往写的乱七八糟的代码,想着整理下设置这一个功能。

因为现在Matlab已经可以便捷的使用json文件了,不如就选择json文件作为外部储存文件。

Matlab内部变量使用的结构体存储。

类代码如下所示,该属性主要由settingName作为json外部储存文件名称,settingStuct作为结构体变量,save_path等功能以后再做。

下面这个代码为设置的父类,而子类继承父类,构造函数中name锁定为该子类名称,通过这种方式可以较好的管理一些设置,希望这些有一些帮助。

SettingsBase.m
classdef SettingsBase < handle  
    % 公共属性可以在这里定义,但通常更好的做法是使用getter和setter方法  
    % 保护属性可以在子类中被访问,但不能在类外部被直接访问  
    % 不能通过a.settingName访问,这里设置了方法,只能通过方法访问
    properties (Access = protected)  
        % 这里定义一些通用的设置属性  
        settingName
        settingStruct
        save_path = ''
    end  
  
    % 构造函数  
    methods  
        function obj = SettingsBase(name)  
            if nargin > 0  
                disp('Setting name provided.')  
                obj.setname(name); % 调用自定义的setter方法  
                % 注意:setter方法不返回obj,因为MATLAB中对象的修改是通过引用传递的  
                disp(obj.getname()) % 使用getter方法获取并显示属性值  
            end  
        end  
    end  
  
    % 可以添加一些通用的方法,比如保存和加载设置  
    methods  
        function saveSettings(obj, filename)  
            % 总体功能,保存json设置文件  
            % ...  
            % 如果传入filename,那么就试用它作为名称,现在暂时不考虑路径
            if nargin == 1
                  
                filename = obj.getname;
            end


            
            %保存文件名与地址
            fileext = '.json';
            savefilename = strcat(filename, fileext);
            
            %--这里默认'',没有填写,以后看情况读取设置什么的
            savefilepath = fullfile(obj.save_path,savefilename);
            
            
            json_struct = obj.getset;

            %将结构体设置写入json文件
            jsonStr = jsonencode(json_struct);
            fid = fopen(savefilepath,'w');
            fprintf(fid,'%s',jsonStr);
            fclose(fid);

            disp(['Settings saved to file: ', savefilepath]);

        end  
  
        function loadSettings(obj, filename)  
            % 加载json设置为结构体
            % ...
            % disp(nargin);
            %filename 这里只定义
            %当只有obj作为传参时候,nargin为1,
            %当加入filename,之后考虑作为保存路径

            if nargin == 1
                  
                filename = obj.getname;
            end

                %保存文件名与地址
                fileext = '.json';
                savefilename = strcat(filename, fileext);

                %--这里默认'',没有填写,以后看情况读取设置什么的
                savefilepath = fullfile(obj.save_path,savefilename);
            

            disp(['Loading settings from: ', savefilepath]);  
            
            %加载json文件
            json_string = fileread(savefilepath);
            obj.settingStruct = jsondecode(json_string);

            
        end  
  
        % 添加getter和setter方法,用于访问和设置保护属性  
        function value = getname(obj)  
            value = obj.settingName;  
        end  
        
        function setname(obj, value)  
            if ~isempty(value)  
                disp('Setting name updated.')  
                obj.settingName = value;  
            end  
        end

        function value = getset(obj)  
            value = obj.settingStruct;  
        end  
        
        function setset(obj, value)  
            if ~isempty(value)  
                obj.settingStruct = value;  
            end  
        end

    end  
end

子类,目前没有想到更多的功能

DataSettings.m
classdef DataSettings < SettingsBase  
    % 数据设置特有的属性  
    properties (Access = protected)  
  
    end  
  
    % 构造函数,可以调用父类的构造函数来初始化通用设置  
    methods  
        function obj = DataSettings()  
            % 调用父类的构造函数  
            obj = obj@SettingsBase('data');  
        end  
    end  

end
%% 准备设置data1.json文件
data = struct('name','joh','age',30);
jsonStr = jsonencode(data(:));
fid = fopen('data1.json','w');
fprintf(fid,'%s',jsonStr);
fclose(fid);

%% 读取设置文件
b = DataSettings();
b.loadSettings('data1');
setStuct = b.getset()

%% 结果
% Setting name provided.
% Setting name updated.
% data
% Loading settings from: data1.json
% 
% setStuct = 
% 
%   包含以下字段的 struct:
% 
%     name: 'joh'
%      age: 30
%% 修改设置文件
setStuct.name = 'haoo';
setStuct.age = 35;

b.setset(setStuct);
b.getset()

%% 结果
% ans = 
% 
%   包含以下字段的 struct:
% 
%     name: 'haoo'
%      age: 35

当然,这里有很多不足之处,还望大佬提点,敬请赐教。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值