You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:30:52