如何在MATLAB中高效读取单行JSON格式的.txt文件
高效将单行JSON格式TXT文件转为MATLAB Table/Cell的方法
问题背景
我有一个单行格式的.txt文件,内容是标准JSON数组,如下所示:
[{"ID":1,"Column_A":"red","Column_B":"apple","Column_C":0},{"ID":2,"Column_A":"orange","Column_B":"orange","Column_C":1},{"ID":2,"Column_A":"green","Column_B":"grapes","Column_C":3},{"ID":3,"Column_A":"purple","Column_B":"onion","Column_C":4}]
之前用strsplit配合循环处理,代码如下,但因为原文件有十几万行数据,处理耗时极长:
data=importdata('example.txt') columns = strsplit(data{1,1},"},") %For concatenation check=[]; for i=1:159929 %total rows in my original file check = [check ;strsplit(columns{1,i},{':',','})]; end
问题根源
你的代码效率低的核心原因:
- 循环中不断执行
check = [check ; ...]会频繁触发内存重分配,每次都要复制原有数据到新的内存空间,时间复杂度为O(n²),数据量越大越慢。 - 手动拆分JSON字符串容易遗漏边界情况(比如字符串中包含
:或,的场景),还容易出错。
高效解决方案
直接利用MATLAB内置的JSON解析函数,这是专门针对这类格式优化的方法,速度快且准确:
步骤1:读取文件内容
用fileread直接读取整个文件的字符串内容,比importdata更简洁:
jsonStr = fileread('example.txt');
步骤2:解码JSON为结构体数组
使用jsondecode将JSON字符串直接解析为MATLAB结构体数组:
structArray = jsondecode(jsonStr);
步骤3:转为Table类型(推荐)
用struct2table一键将结构体数组转为Table,完美保留列名和数据类型:
dataTable = struct2table(structArray);
步骤4:转为Cell类型(如果需要)
如果需要Cell类型,可先转Table再转Cell,或者直接用struct2cell后调整维度:
% 方法1:Table转Cell dataCell = table2cell(dataTable); % 方法2:结构体直接转Cell(需调整维度) dataCell = struct2cell(structArray); dataCell = dataCell'; % 转置为行对应原数据行
完整示例代码
% 读取文件 jsonStr = fileread('example.txt'); % 解码JSON structArray = jsondecode(jsonStr); % 转为Table dataTable = struct2table(structArray); % 可选:转为Cell dataCell = table2cell(dataTable); % 可选:保存为CSV(比手动拼接快得多) writetable(dataTable, 'output.csv');
效率对比
用内置函数处理十几万行数据的时间通常在毫秒级,而你的原循环方法可能需要几分钟甚至更久,差异非常明显。
内容的提问来源于stack exchange,提问作者MakM
相关产品推荐
相关产品推荐

