我正在尝试用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):
{
"summary": {
"queryTime": 34,
"numResults": 1
},
"addresses": [
{
"address": {
"buildingNumber": "1433",
"streetNumber": "1433",
"routeNumbers": [],
"street": "Avenue of the Americas",
"streetName": "Avenue of the Americas",
"streetNameAndNumber": "1433 Avenue of the Americas",
"countryCode": "US",
"countrySubdivision": "NY",
"countrySecondarySubdivision": "New York",
"municipality": "New York",
"postalCode": "10019",
"municipalitySubdivision": "Manhattan",
"country": "United States",
"countryCodeISO3": "USA",
"freeformAddress": "1433 Avenue of the Americas, New York, NY 10019",
"boundingBox": {
"northEast": "40.765687,-73.976240",
"southWest": "40.765012,-73.976714",
"entity": "position"
},
"extendedPostalCode": "10019-1532",
"countrySubdivisionName": "New York",
"countrySubdivisionCode": "NY",
"localName": "New York"
},
"position": "40.765450,-73.976410",
"id": "IjKZF6illVLFN65JULL_5w"
}
]
}
字符串
现在,我只需要从这个信息中提取值streetNameAndNumber
,我使用了Javascript操作,但它无法提取字段。
这个提取的信息应该被识别并定义为我可以在Say动作(%streetNameAndAddress)
中命名的变量,这样它就可以为用户大声地说出它。
我尝试了几种不同的代码选项,但都失败了,因为info没有返回并将字段标识为信息。
var data = JSON.parse(global('http_data'));
var streetNameAndAddress = data.addresses[0].address.streetNameAndNumber;
型
当执行时,就像它没有正确定义变量,Say操作返回的是普通的"%streetNameAndAddress"
。
正确的代码应该是什么?
感谢您的帮助,并为任何错误的术语使用道歉--我在编码方面的xp几乎为零。
1条答案
按热度按时间7fhtutme1#
我了解到您正在尝试使用Tasker构建一个按钮小部件,该小部件使用Azure Maps API表示当前用户的位置。您面临着从Azure Maps API的JSON响应中提取
streetNameAndNumber
的问题。根据您提供的JSON结构和您尝试过的代码片段,您的方法似乎基本正确。但是,如果Say操作返回普通的
%streetNameAndAddress
,则表明Tasker中的变量可能没有正确设置。下面是JavaScript代码的修订版本:
字符串
在这段代码中,我在尝试访问
streetNameAndNumber
之前首先检查data
、data.addresses
和data.addresses[0]
是否有效。这是为了防止在数据结构不符合预期时出现任何潜在错误。然后,我使用setGlobal
设置Tasker全局变量%streetNameAndAddress
。请确保:
http_data
变量正确包含来自Azure Maps API的JSON响应。setGlobal
函数在Tasker中被正确地用于设置全局变量。如果在您的Tasker版本中setGlobal
不同,请将其替换为适当的方法。如果您仍然面临问题,请仔细检查JSON响应结构,以确保它与您用于访问
streetNameAndNumber
的路径匹配。此外,请确保Tasker JavaScript环境正确解释并执行JavaScript代码。我希望这能帮助您获得所需的功能。如果您有任何进一步的问题或遇到更多的问题,请随时询问!