如何访问Matlab结构数组中的某些元素

How to access certain elements in Matlab structure array

我正在做一个连接 Thingsboard 网站的 Matlab 项目。我使用 webread 函数从发送信息为 JSON 的服务器获取响应。当我发送获取用户信息的请求时,我应该获取以下格式的信息:

  [
{
  "email": "Davis@gmail.com",
  "authority": "CUSTOMER_USER",
  "firstName": "Davis",
  "lastName": "Smith",
  "name": "JOHN@gmail.com"
},

  "email": "DONALDSON@hotmail.com",
  "authority": "CUSTOMER_USER",
  "firstName": "DONALDSON",
  "lastName": "ZAIK",
  "name": "meraj@hotmail.com"
},

]

但是,我在Matlab中使用webread函数得到的响应如下:

4×1 struct array with fields:
email
authority
firstName
lastName
name

当我访问电子邮件等任何字段时,它会显示所有用户的电子邮件如下:

response = webread("serverurl");

response.email 


ans =

    'Davis@gmail.com'

ans =

    'DONALDSON@hotmail.com'

我想知道的是如何通过只知道一个字段来获取特定用户的信息。例如,我想通过知道名字 "Davis".

来获取用户戴维斯的电子邮件、姓氏和权限

非常感谢你在这件事上的帮助。

您可以使用以下语法:

filtered_response = response(strcmp({response(:).firstName}, 'Davis'));
  • response(:).firstName 列出所有名字。
  • {response(:).firstName} 构建名字元胞数组。
    示例:{'Davis', 'DONALDSON'}
  • strcmp({...}, 'Davis') Returns 值为 1 的逻辑数组,其中 firstName 等于 'Davis',0 不等于.
    示例:如果仅 response(2).firstName = 'Davis',则返回 [0 1 0 0]
  • response(strcmp...) 使用逻辑索引返回一个新数组,其中索引等于 1.
    示例:response(logical([0 1 0 0]))、returns 包含 response 的第二个结构的数组(长度为 1)。

示例代码:

%Build an array containing two structures (just for the example)
%Assume response is the result of webread 
response = [struct('email', 'Davis@gmail.com', 'authority', 'CUSTOMER_USER', 'firstName', 'Davis', 'lastName', 'Smith', 'name', 'JOHN@gmail.com');...
            struct('email', 'DONALDSON@hotmail.com', 'authority', 'CUSTOMER_USER', 'firstName', 'DONALDSON', 'lastName', 'ZAIK', 'name', 'meraj@hotmail.com')];

filtered_response = response(strcmp({response(:).firstName}, 'Davis'));

结果:

filtered_response = 

  struct with fields:

        email: 'Davis@gmail.com'
    authority: 'CUSTOMER_USER'
    firstName: 'Davis'
     lastName: 'Smith'
         name: 'JOHN@gmail.com'

如果只有一个结构 firstName = 'Davis'.
,现在您可以获得任何字段,例如 filtered_response.email 并且 filtered_response(:).email 以防有多个匹配结构。