如何使用 USNO Moonrise & Sunrise JSON 数据数组?
How to use a USNO Moonrise & Sunrise JSON data array?
这是我的第一个问题。我慢慢地慢慢地向前砍自己。我想将此 JSON 数据 URL 呈现为 HTML。显示日出和月出、落日等。下面粘贴了 JSON URL、JSON 和我尚未获得月球数据的凌乱的非工作脚本。几个小时前,Problary 离它更近了。问题是我认为 JSON 排列的数据。之后,我粘贴 API 页面。真的希望有人能够提供帮助。 : 谢谢。
马库斯
PS。请清楚,noobie 警报!单行和神秘的例子对我来说很难做到。
URL
http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10
JSON
{
"error":false,
"apiversion":"2.0.0",
"year":2017,
"month":3,
"day":4,
"dayofweek":"Saturday",
"datechanged":false,
"lon":147.000000,
"lat":9.000000,
"tz":10,
"sundata":[
{"phen":"BC", "time":"06:04"},
{"phen":"R", "time":"06:25"},
{"phen":"U", "time":"12:24"},
{"phen":"S", "time":"18:23"},
{"phen":"EC", "time":"18:44"}],
"moondata":[
{"phen":"R", "time":"10:50"},
{"phen":"U", "time":"17:12"},
{"phen":"S", "time":"23:36"}],
"closestphase":{"phase":"First Quarter","date":"March 5, 2017","time":"21:32"},
"fracillum":"34%",
"curphase":"Waxing Crescent"
}
已更新!代码状态
$.getJSON("http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10", function(data) {
data.sundata.forEach(function (sd) {
$('#'+sd.phen).text(sd.time)
})
var rise = data.moondata[0].time;
var tran = data.moondata[1].time;
var sets = data.moondata[2].time;
// Set the table td text
$('#R').text(rise);
$('#U').text(tran);
$('#S').text(sets);
}
})
之前的代码
<script>
$.getJSON("http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10", function(data) {
console.log(data);
// Set the variables from the results array
var dusk = ["sundata"][0]["BC.time"];
console.log(data);
var rise = ["sundata"][0]["R.time"];
console.log(data);
var noon = ["sundata"][0]["U.time"]
console.log(data);
var sets = ["sundata"][0]["S.time"];
console.log(data);
var dawn = ["sundata"][0]["EC.time"];
console.log(data);
// Set the table td text
$('BC').text(dusk);
$('R').text(rise);
$('U').text(noon);
$('S').text(sets);
$('EC').text(dawn);
});
</script>
</head>
<body>
<h1>MOONSUN</h1>
<hr/>
<table border="1">
<td>DAWN:</td>
<td id="BC"></td>
</tr>
<tr>
<td>RISE:</td>
<td id="R"></td>
</tr>
<tr>
<td>NOON:</td>
<td id="U"></td>
</tr>
<tr>
<td>SET:</td>
<td id="S"></td>
</tr>
<tr>
<td>DUSK:</td>
<td id="EC"></td>
</tr>
</table>
</div>
</body>
API LINK
http://aa.usno.navy.mil/data/docs/api.php
新 JSFIDDLE
首先,您需要访问数据对象以获取任何信息 var dusk = data["sundata"][0]["BC.time"]
。注意那里的数据对象。
你的方式 accessing/handling 来自数组和嵌套对象的数据也是错误的。端点正在返回一个对象,其属性为对象 ({}
) 的字符串、布尔值或数组 ([]
)。
要按索引访问数组,如 arr[0]
中所示,对于对象,您可以执行 obj.propertyIWant
或 obj['propertyIWant']
要使用 jQuery 通过 id 访问元素,您需要在元素 id 之前加上 #
,例如 $('#BC')
.
对于你想做的事情,你应该这样做:
var dusk = data.sundata[0].time;
var rise = data.sundata[1].time;
var noon = data.sundata[2].time;
var sets = data.sundata[3].time;
var dawn = data.sundata[4].time;
或者,以更直接的方式,不设置这些变量,使用您从端点获得的信息:
data.sundata.forEach(function (sd) {
$('#'+sd.phen).text(sd.time)
})
从您的 JSFiddlelink 获取 url 无效,因为您使用的是 HTTPS 连接并试图从 HTTP link 获取。要工作,您需要使用来自 HTTP 的 Fiddle。更多信息 here.
这是我的第一个问题。我慢慢地慢慢地向前砍自己。我想将此 JSON 数据 URL 呈现为 HTML。显示日出和月出、落日等。下面粘贴了 JSON URL、JSON 和我尚未获得月球数据的凌乱的非工作脚本。几个小时前,Problary 离它更近了。问题是我认为 JSON 排列的数据。之后,我粘贴 API 页面。真的希望有人能够提供帮助。 : 谢谢。
马库斯
PS。请清楚,noobie 警报!单行和神秘的例子对我来说很难做到。
URL
http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10
JSON
{
"error":false,
"apiversion":"2.0.0",
"year":2017,
"month":3,
"day":4,
"dayofweek":"Saturday",
"datechanged":false,
"lon":147.000000,
"lat":9.000000,
"tz":10,
"sundata":[
{"phen":"BC", "time":"06:04"},
{"phen":"R", "time":"06:25"},
{"phen":"U", "time":"12:24"},
{"phen":"S", "time":"18:23"},
{"phen":"EC", "time":"18:44"}],
"moondata":[
{"phen":"R", "time":"10:50"},
{"phen":"U", "time":"17:12"},
{"phen":"S", "time":"23:36"}],
"closestphase":{"phase":"First Quarter","date":"March 5, 2017","time":"21:32"},
"fracillum":"34%",
"curphase":"Waxing Crescent"
}
已更新!代码状态
$.getJSON("http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10", function(data) {
data.sundata.forEach(function (sd) {
$('#'+sd.phen).text(sd.time)
})
var rise = data.moondata[0].time;
var tran = data.moondata[1].time;
var sets = data.moondata[2].time;
// Set the table td text
$('#R').text(rise);
$('#U').text(tran);
$('#S').text(sets);
}
})
之前的代码
<script>
$.getJSON("http://api.usno.navy.mil/rstt/oneday?date=today&coords=9S,147E&tz=10", function(data) {
console.log(data);
// Set the variables from the results array
var dusk = ["sundata"][0]["BC.time"];
console.log(data);
var rise = ["sundata"][0]["R.time"];
console.log(data);
var noon = ["sundata"][0]["U.time"]
console.log(data);
var sets = ["sundata"][0]["S.time"];
console.log(data);
var dawn = ["sundata"][0]["EC.time"];
console.log(data);
// Set the table td text
$('BC').text(dusk);
$('R').text(rise);
$('U').text(noon);
$('S').text(sets);
$('EC').text(dawn);
});
</script>
</head>
<body>
<h1>MOONSUN</h1>
<hr/>
<table border="1">
<td>DAWN:</td>
<td id="BC"></td>
</tr>
<tr>
<td>RISE:</td>
<td id="R"></td>
</tr>
<tr>
<td>NOON:</td>
<td id="U"></td>
</tr>
<tr>
<td>SET:</td>
<td id="S"></td>
</tr>
<tr>
<td>DUSK:</td>
<td id="EC"></td>
</tr>
</table>
</div>
</body>
API LINK
http://aa.usno.navy.mil/data/docs/api.php
新 JSFIDDLE
首先,您需要访问数据对象以获取任何信息 var dusk = data["sundata"][0]["BC.time"]
。注意那里的数据对象。
你的方式 accessing/handling 来自数组和嵌套对象的数据也是错误的。端点正在返回一个对象,其属性为对象 ({}
) 的字符串、布尔值或数组 ([]
)。
要按索引访问数组,如 arr[0]
中所示,对于对象,您可以执行 obj.propertyIWant
或 obj['propertyIWant']
要使用 jQuery 通过 id 访问元素,您需要在元素 id 之前加上 #
,例如 $('#BC')
.
对于你想做的事情,你应该这样做:
var dusk = data.sundata[0].time;
var rise = data.sundata[1].time;
var noon = data.sundata[2].time;
var sets = data.sundata[3].time;
var dawn = data.sundata[4].time;
或者,以更直接的方式,不设置这些变量,使用您从端点获得的信息:
data.sundata.forEach(function (sd) {
$('#'+sd.phen).text(sd.time)
})
从您的 JSFiddlelink 获取 url 无效,因为您使用的是 HTTPS 连接并试图从 HTTP link 获取。要工作,您需要使用来自 HTTP 的 Fiddle。更多信息 here.