6

我从 Web 服务获得了结果,MatLab 很高兴地通知它是一个1x1 struct。但是,当我尝试显示它时(通过输入receivedData并按enter)我会看到:

ResponseData: [5x1 struct]

同样高兴的是,我输入了以下内容,试图让我查看数据:

struct2array(responseData)

我只得到一堆(不是五个,超过五个)可能是所提供数据列的名称标题的字符串。

如何从这种结构中获取所有数据?

4

5 回答 5

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

请记住,以cellgetfield的形式提供数据,而不是matrix

于 2013-02-16T21:05:08.500 回答
3

或者您可以使用 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);
于 2017-02-15T09:53:24.610 回答
1

为了显示结构的所有元素和子元素,您可以在此处下载自定义函数:http: //www.mathworks.com/matlabcentral/fileexchange/13831-structure-display

于 2015-07-13T15:09:31.923 回答
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
于 2014-07-02T12:47:39.383 回答
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})  }
于 2013-02-17T07:36:36.033 回答