javascript - 解析来自不断变化顺序的 JSON 响应的值

标签 javascript json tasker

我正在尝试用 javscript 解析来 self 的家庭自动化系统的 JSON 响应。 响应是 available here

这只是响应的一小部分,而且,每次重新启动时按键的顺序都会发生变化,原因我不知道,su 使用数字索引不会真正起作用 我需要能够将sensor.out、sensor.in、sensor.door的状态值存储到andorid上tasker的变量中 我尝试使用entity.id进行选择,但由于某种原因代码从未完成(我相信我只是不知道我在做什么)

最佳答案

在 ES6 中,您可以使用 Array#find 方法:

response.find(o => o.entity_id == 'sensor.out').state

查看代码片段:

var response = [ { "attributes":{ "friendly_name":"door" }, "entity_id":"sensor.door", "last_changed":"2016-12-31T11:15:59.395808+00:00", "last_updated":"2016-12-31T11:15:59.395808+00:00", "state":"closed" }, { "attributes":{ "friendly_name":"In", "unit_of_measurement":"\u00b0C" }, "entity_id":"sensor.in", "last_changed":"2016-12-31T11:20:02.179821+00:00", "last_updated":"2016-12-31T11:20:02.179821+00:00", "state":"20.7" }, { "attributes":{ "changed_by":null, "code_format":".+", "friendly_name":"panel" }, "entity_id":"alarm_control_panel.panel", "last_changed":"2016-12-31T11:14:56.471966+00:00", "last_updated":"2016-12-31T11:14:56.471966+00:00", "state":"disarmed" }, { "attributes":{ "friendly_name":"Out", "unit_of_measurement":"\u00b0C" }, "entity_id":"sensor.out", "last_changed":"2016-12-31T11:14:58.452345+00:00", "last_updated":"2016-12-31T11:14:58.452345+00:00", "state":"7.1" }];
var state = response.find(o => o.entity_id == 'sensor.out').state;
console.log('sensor.out state is', state);

或者,您可以将响应转换为以实体 id 值作为键的对象,这样您就可以像 response['session.out'].state 一样访问它:

response = Object.assign({}, ...response.map( o => ({[o.entity_id]: o}) ));

查看代码片段:

var response = [ { "attributes":{ "friendly_name":"door" }, "entity_id":"sensor.door", "last_changed":"2016-12-31T11:15:59.395808+00:00", "last_updated":"2016-12-31T11:15:59.395808+00:00", "state":"closed" }, { "attributes":{ "friendly_name":"In", "unit_of_measurement":"\u00b0C" }, "entity_id":"sensor.in", "last_changed":"2016-12-31T11:20:02.179821+00:00", "last_updated":"2016-12-31T11:20:02.179821+00:00", "state":"20.7" }, { "attributes":{ "changed_by":null, "code_format":".+", "friendly_name":"panel" }, "entity_id":"alarm_control_panel.panel", "last_changed":"2016-12-31T11:14:56.471966+00:00", "last_updated":"2016-12-31T11:14:56.471966+00:00", "state":"disarmed" }, { "attributes":{ "friendly_name":"Out", "unit_of_measurement":"\u00b0C" }, "entity_id":"sensor.out", "last_changed":"2016-12-31T11:14:58.452345+00:00", "last_updated":"2016-12-31T11:14:58.452345+00:00", "state":"7.1" }];
response = Object.assign({}, ...response.map( o => ({[o.entity_id]: o}) ));
console.log('sensor.out state is', response['sensor.out'].state);

关于javascript - 解析来自不断变化顺序的 JSON 响应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41407985/

相关文章:

javascript - "throw new Error()"在 catch block 上下文中捕获

javascript - 使用 Django 通过 AJAX URL 传递参数

javascript - 从 NodeJS/Express 发送 JSON 响应

android - 在 Android 上打开 HTML 文件

javascript - 计算日期之间的特定工作日数

用于关闭浏览器选项卡的 android chrome 快捷方式

javascript - React.js 是否以不同方式处理 "static"?复合成分

JavaScript ISO 日期为人类可读

Java震动: can't find proper spec for my transformation

jquery - 为什么程序无法读取文件 json?