如何使用 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

[link]http://jsfiddle.net/kmg747/4egLxu2e/

首先,您需要访问数据对象以获取任何信息 var dusk = data["sundata"][0]["BC.time"]。注意那里的数据对象。

你的方式 accessing/handling 来自数组和嵌套对象的数据也是错误的。端点正在返回一个对象,其属性为对象 ({}) 的字符串、布尔值或数组 ([])。

要按索引访问数组,如 arr[0] 中所示,对于对象,您可以执行 obj.propertyIWantobj['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.

检查后 API for it, here 是您尝试执行的操作的更新版本。您可能需要处理一些可能会或可能不会返回的值。