我无法从JSON响应访问密钥,但可以看到其所有密钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我无法从JSON响应访问密钥,但可以看到其所有密钥相关的知识,希望对你有一定的参考价值。

故事的寓意:始终仔细检查您的钥匙。我的密钥是states,正在尝试访问state

服务器正在使用Flask并响应嵌套的JSON。在前端,我可以看到请求已通过,并且可以console.log JSON正常。

如果我跑步:Object.keys(JSON)它会打印所有的第一个键。

类似地,如果我打印出JSON,它将把它打印为JSON。

我已经使用typeof()进行检查以确保响应已接收到JSON。

[每当我尝试使用现有键(例如,县)访问JSON中的值时,它都将不起作用。

[如果您在下面注意到,counties.cases存在,但是当我尝试访问JSON.counties.cases时,它抱怨县不存在。我已经尝试过每一个键。

并且已经尝试遍历JSON,并且每次迭代都返回undefined

我也尝试过JSON.parse(),但由于它已经是JSON对象,所以无法解析。

JSON Error

    send_request = async () => {
        const host = window.location.protocol + '//' + window.location.hostname + ":8080"
        const url: string = `${host}/get-all-data`
        let response = await fetch(
            url, {mode: 'cors'}
        ).then(response => response.json().then(res => {
            console.log(res) // Works
            console.log(res.state) // Doesn't work
            console.log(res.state.cases) // Doesn't work
}
答案

听起来您正在尝试访问一个尚不存在的对象。我的意思是,我认为您正在访问字段时,Promise尚未解决。

并且当您在检查器中打开对象时,诺言得到解决,结果就在那里。

无论您使用什么来在浏览器中执行请求,我都假定它正在返回Promise,并且您需要等待它解析后才能访问结果。

假设您在变量p中有响应承诺,那么您可以等待它执行类似的操作:

p.then(function (response) {
  console.log(response.countries);
});

如果您需要更多详细信息,请告诉我,或添加有关您的具体情况的其他信息。

另一答案

我用来访问JSON的密钥上有错字。因此,当我打印JSON时,它可以正常打印,但是当我访问state时它不起作用,因为真正的密钥是states

以上是关于我无法从JSON响应访问密钥,但可以看到其所有密钥的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 boto 从 S3 读取密钥,但可以使用 aws cli

Ameritrade API POST 请求 JSON 响应

动态密钥 json 从 WebService 获取响应?

Java 从 Windows 密钥库访问中间 CA?

从 JSON 响应中提取浮点密钥对值时出现 TypeError

Github 添加其他人的 SSH 密钥将授予对所有存储库的访问权限?