如何访问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
以防有多个匹配结构。
我正在做一个连接 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
以防有多个匹配结构。