json 用于从AzureMapAPI HTTP请求解析地理位置信息的Javascript let

wi3ka0sx  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(79)

我正在尝试用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几乎为零。

7fhtutme

7fhtutme1#

我了解到您正在尝试使用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');
}

字符串
在这段代码中,我在尝试访问streetNameAndNumber之前首先检查datadata.addressesdata.addresses[0]是否有效。这是为了防止在数据结构不符合预期时出现任何潜在错误。然后,我使用setGlobal设置Tasker全局变量%streetNameAndAddress
请确保:

  1. Tasker中的http_data变量正确包含来自Azure Maps API的JSON响应。
  2. setGlobal函数在Tasker中被正确地用于设置全局变量。如果在您的Tasker版本中setGlobal不同,请将其替换为适当的方法。
    如果您仍然面临问题,请仔细检查JSON响应结构,以确保它与您用于访问streetNameAndNumber的路径匹配。此外,请确保Tasker JavaScript环境正确解释并执行JavaScript代码。
    我希望这能帮助您获得所需的功能。如果您有任何进一步的问题或遇到更多的问题,请随时询问!

相关问题