JSON [object Object]数据拉取(无法获取对象数据)

时间:2018-01-09 16:36:25

标签: javascript json api object

简介
您好,我遇到的问题是我使用JSON提取API数据但是我在显示或使用数据时遇到问题。

我的代码

function pullingInformation () {
    var data = new XMLHttpRequest();
    data.open('GET', 'RANDOM URL CANT SHOW API KEY');

    data.onload = function () {
        if (data.status >= 200 && data.status < 400) {
            // Different types of JSON.random(). Examples are: parse() and stringify();
            var ourData = JSON.stringify(data.responseText);
            var tempOurData = JSON.parse(ourData);
            tempHTML = WeatherHTML(tempOurData);
            $('#DivID').html(tempHTML);
        }
        else {
            $('#DivID').html('Server failure, please try again!');
        }
    };

    data.onerror = function () {
        $('#DivID').html('Connection error ocurred, please try again!');
    }
}

function WeatherHTML (data) {
    tempHTML = data;
    console.log(tempHTML);
console.log(tempHTML.coord);
    return tempHTML.coord;
}

问题
当我console.log() tempHTML时,我从API中获取了整个代码,但是如果我尝试仅使用如下代码的特定位:

{"coord":{"lon":45.1,"lat":12.45},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"base":"stations","main:{"temp":298.508,"pressure":1031.37,"humidity":97,"temp_min":298.508,"temp_max":298.508,"sea_level":1031.75,"grnd_level":1031.37},"wind":{"speed":5.72,"deg":92.5012},"clouds":{"all":12},"dt":1515515421,"sys":{"message":0.0155,"country":"YE","sunrise":1515468218,"sunset":1515509418},"id":6940814,"name":"Craiter","cod":200}

例如tempHTML.coord返回我&#39; undefined&#39;。我做错了什么,我的错误在哪里?我只是简单地提取信息或用不正确的方法调用对象吗?

1 个答案:

答案 0 :(得分:2)

var ourData = JSON.stringify(data.responseText);

在这里,您将获取表示对象的字符串JSON,并将其转换为字符串JSON,表示字符串JSON ,表示对象< / em>的

var tempOurData = JSON.parse(ourData);

然后你反过来,给自己原始的JSON字符串。

这完全没有意义,你会得到同样的效果:

var tempOurData = data.responseText;
tempHTML = WeatherHTML(tempOurData);

然后通过一个记录它的函数传递它,将它分配给全局,然后返回它。然后,您将其分配给相同的全局,覆盖已存在的相同字符串。

tempHTML.coord

然后尝试读取字符串的coord属性。它未定义,因为字符串没有coord属性。

您需要解析原始 JSON以将其转换为对象。然后你可以访问它的属性。

if (data.status >= 200 && data.status < 400) {
    var ourData = JSON.parse(data.responseText);
    console.log(ourData.coord);
}

此外,您需要修复JSON。它无效。你错过了一个报价。 JSON Lint会突出显示确切位置。

$('#DivID').html(tempHTML);

jQuery的html方法希望传递一个字符串,jQuery对象或DOM对象。

{"lon":45.1,"lat":12.45}是一个普通对象,而不是上述数据类型之一。 jQuery会将其视为空字符串。