Javascriptlet 用于解析来自 Azure Maps API HTTP 请求的地理位置信息

问题描述 投票:0回答:1

我正在尝试使用 Tasker 构建一个按钮小部件,按下该小部件时,会以街道名称和号码的格式说出当前用户的位置(适用于视障人士)。

除此之外,我设置了一个 HTTP 请求,该请求使用检索到的用户位置并对 Azure Maps API 进行反向地址搜索: https://atlas.microsoft.com/search/address/reverse/json?api-version=1.0&subscription-key=[subscription-key]&query=%gl_latitude,%gl_longitude

这将返回以下 JSON(在 Tasker 中定义为 http_data): { “概括”: { “查询时间”:34, “结果数”:1 }, “地址”:[ { “地址”: { "建筑物编号": "1433", "街道号码": "1433", “路线编号”:[], "street": "美洲大道", "streetName": "美洲大道", "streetNameAndNumber": "美洲大道 1433 号", “国家代码”:“美国”, “国家细分”:“纽约”, "countrySecondarySubdivision": "纽约", “市镇”:“纽约”, “邮政编码”:“10019”, "municipalitySubdivision": "曼哈顿", “国家”:“美国”, "countryCodeISO3": "美国", "freeformAddress": "1433 美洲大道, 纽约, NY 10019", “边界框”:{ "东北": "40.765687,-73.976240", "西南": "40.765012,-73.976714", “实体”:“位置” }, "扩展邮政编码": "10019-1532", "countrySubdivisionName": "纽约", “国家细分代码”:“NY”, "localName": "纽约" }, “位置”:“40.765450,-73.976410”, “id”:“IjKZF6illVLFN65JULL_5w” } ] }

现在,我需要的是从该信息中仅提取值 streetNameAndNumber,我使用了 Javascriplet 操作,但无法提取该字段。

提取的信息应被识别并定义为我可以在 Say 操作中命名的变量 (%streetNameAndAddress),以便它为用户大声说话。

我尝试了几种不同的代码选项,但都失败了,因为信息没有返回并将字段识别为信息。一个例子:

var data = JSON.parse(global('http_data')); var streetNameAndAddress = data.addresses[0].address.streetNameAndNumber;

执行时就像没有正确定义变量,Say 操作返回普通的“%streetNameAndAddress”。

正确的代码是什么?

感谢您的帮助,并对任何错误的术语使用表示歉意——我的编码经验实际上为零。

javascript json accessibility azure-maps tasker
1个回答
0
投票

我了解您正在尝试使用 Tasker 构建一个按钮小部件,该小部件使用 Azure Maps API 说出当前用户的位置。您在从 Azure Maps API 的 JSON 响应中提取

streetNameAndNumber
时遇到问题。

根据您提供的 JSON 结构和您尝试过的代码片段,看来您的方法基本上是正确的。但是,如果 Say 操作返回普通的

%streetNameAndAddress
,则表明该变量可能未在 Tasker 中正确设置。

这是 JavaScript 代码的修订版本:

var data = JSON.parse(global('http_data'));
if (data && data.addresses && data.addresses.length > 0) {
    var streetNameAndAddress = data.addresses[0].address.streetNameAndNumber;
    setGlobal('streetNameAndAddress', streetNameAndAddress);
} else {
    setGlobal('streetNameAndAddress', 'Location not found');
}

在此代码中,我首先检查

data
data.addresses
data.addresses[0]
是否有效,然后再尝试访问
streetNameAndNumber
。这是为了防止数据结构不符合预期时出现任何潜在错误。然后,我使用
setGlobal
设置 Tasker 全局变量
%streetNameAndAddress

请确保:

  1. Tasker 中的
    http_data
    变量正确包含来自 Azure Maps API 的 JSON 响应。
  2. setGlobal
    函数正确用于在Tasker中设置全局变量。如果您的 Tasker 版本不同,请将
    setGlobal
    替换为适当的方法。

如果您仍然遇到问题,请仔细检查 JSON 响应结构,以确保它与您用于访问的路径匹配

streetNameAndNumber
。另外,请确保 Tasker JavaScriptlet 环境正确解释和执行 JavaScript 代码。

我希望这可以帮助您获得所需的功能。如果您还有任何疑问或遇到更多问题,请随时提问!

© www.soinside.com 2019 - 2024. All rights reserved.