我从Web服务获得了结果,MatLab很高兴地通知它是 1x1 struct 。但是,当我尝试显示它时(通过输入 receivedData 并按输入),我会看到这个:
ResponseData: [5x1 struct]
同样很高兴,我进入以下内容,试图让我看到数据:
struct2array(responseData)
我只得到一堆(不是五个,超过五个)字符串可能是所提供数据列的名称标题。
如何从这种结构中获取所有数据?
答案 0 :(得分:3)
您可以使用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
请注意,getfield
以单元格的形式提供数据,而不是矩阵。
答案 1 :(得分:2)
或者您可以使用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);
答案 2 :(得分:0)
一些有用的访问语法:
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}) }
答案 3 :(得分:0)
对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
答案 4 :(得分:0)
为了显示结构的所有元素和子元素,您可以在此处下载自定义函数: http://www.mathworks.com/matlabcentral/fileexchange/13831-structure-display