我从 Web 服务获得了结果,MatLab 很高兴地通知它是一个1x1 struct。但是,当我尝试显示它时(通过输入receivedData并按enter)我会看到:
ResponseData: [5x1 struct]
同样高兴的是,我输入了以下内容,试图让我查看数据:
struct2array(responseData)
我只得到一堆(不是五个,超过五个)可能是所提供数据列的名称标题的字符串。
如何从这种结构中获取所有数据?
您可以使用fieldnames
从结构中获取数据,然后使用getfield
函数迭代地显示数据。例如:
structvariable = struct('a',123,'b',456,'c',789);
dataout = zeros(1,length(structvariable)) % Preallocating data for structure
field = fieldnames(a);
for i = 1:length(structvariable)
getfield(structvariable,field{i})
end
请记住,以cellgetfield
的形式提供数据,而不是matrix。
或者您可以使用 cellfun 功能:
% STRUCT - your structure
% tmp_nam - structure field names
% tmp_val - values for structure field names
tmp_nam = fieldnames(STRUCT);
tmp_val = cellfun(@(x)(STRUCT.(x)),tmp_nam,'UniformOutput',false);
为了显示结构的所有元素和子元素,您可以在此处下载自定义函数:http: //www.mathworks.com/matlabcentral/fileexchange/13831-structure-display
对 Sahinsu 的回答的一个小修正:
structvariable = struct('a',123,'b',456,'c',789);
dataout = zeros(1,length(structvariable)) % Preallocating data for structure
field = fieldnames(structvariable);
for i = 1:length(field)
getfield(structvariable,field{i})
end
一些有用的访问语法:
someVar = ResponseData(1) %Displays the first element
someVar = ResponseData(4) %Displays the 4th element
要显示它们,一个接一个
for ix = 1:length(ResponseData)
tmp = ResponseData(ix);
end
获取所有字段名
names = fieldnames(ResponseData)
从具有第一个字段名称的结构中获取所有 5 个数据元素,并将它们放入元胞数组
ixFieldName = 1;
someCellArray = { ResponseData.(ixFieldName{1}) }