gpt4 book ai didi

javascript - json - 无法访问 json 参数

转载 作者:行者123 更新时间:2023-11-28 15:08:02 31 4
gpt4 key购买 nike

这是我的代码

var data = '{"coord":{"lon":74.34,"lat":31.55},"weather":[{"id":711,"main":"Smoke","description":"smoke","icon":"50d"},{"id":701,"main":"Mist","description":"mist","icon":"50d"}],"base":"cmc stations","main":{"temp":304.6,"pressure":1002,"humidity":62,"temp_min":304.15,"temp_max":305.15},"wind":{"speed":5.1,"deg":130},"clouds":{"all":20},"dt":1466901000,"sys":{"type":1,"id":7133,"message":0.0035,"country":"PK","sunrise":1466899176,"sunset":1466950287},"id":1172451,"name":"Lahore","cod":200}'
setWeather(data);

function setWeather(data) {
var json = JSON.parse(JSON.stringify(data));
alert(json['main']['temp']);
$('#temp').html(json['main']['temp']);
}

我似乎无法弄清楚为什么我无法访问 json 对象参数。有谁知道问题出在哪里吗?

提前致谢。

最佳答案

让我们进行一些基本的调试:

> var data = '{"coord": ... }';
> typeof data
"string"

到目前为止一切顺利,data 是一个字符串。

> JSON.stringify(data);
""{\"coord\": ... }""
> typeof JSON.stringify(data);
"string"

显然JSON.stringify(data)也返回一个字符串。我们可以看到 data 中包含相同的值,但现在包括周围的引号(注意开头和结尾的双 "")和转义引号 (\")。

那么 JSON.stringify 到底做了什么?它将任何 JavaScript 值转换为 JSON。一些例子:

> JSON.stringify([]) // array
"[]"
> JSON.stringify(true) // array
"true"
> JSON.stringify("foo") // string
""foo""

我们可以看到传递一个字符串只会产生另一个 JSON 编码的字符串,因此这似乎没有特别的帮助。但您也在使用 JSON.parse,所以让我们看看它有什么效果:

> JSON.parse(JSON.stringify(data))
"{"coord": ... }"
> typeof JSON.parse(JSON.stringify(data))
"string"

似乎使用 JSON.parse 再次返回一个字符串。这应该不会太令人惊讶,因为我们将字符串值传递给JSON.stringify,后者会将其编码为 JSON 字符串。解析这个结果必须返回原始值,它是一个字符串。我们可以轻松验证这一点:

> JSON.parse(JSON.stringify(data)) === data
true

是的。

所以这并不能帮助我们将 data 转换为 JavaScript 对象。让我们尝试一下 JSON.parse:

> JSON.parse(data)
Object {coord: Object, weather: Array[2], base: "cmc stations", main: Object, wind: Object…}

看起来好多了。由于 data 包含 JSON 编码对象,因此 JSON.parse 将该值转换为 JavaScript 对象。

关于javascript - json - 无法访问 json 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38035072/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com