【问题标题】:JSON [object Object] Data Pulling (unable to get object data)JSON [object Object] 数据拉取(无法获取对象数据)
【发布时间】:2018-06-18 18:08:51
【问题描述】:

简介
您好,我在使用 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 返回我“未定义”。我做错了什么,我的错误在哪里?我只是将信息拉错还是以不正确的方法调用对象?

【问题讨论】:

  • "tempHTML.coord" — 您不会在主代码示例中的任何地方使用它。您应该提供一个真实的minimal reproducible example,它没有碎片化。
  • 你应该enable Strict mode。隐式全局变量是编写难以维护的代码的好方法。
  • 我不明白你的意思?另外,我的错误在哪里,我将编辑问题!

标签: javascript json api object


【解决方案1】:
var ourData = JSON.stringify(data.responseText);

在这里,您将 表示对象的 JSON 字符串 转换为 表示表示对象的 JSON 字符串 的 JSON 字符串。

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 会将其视为空字符串。

【讨论】:

  • 我有问题。尝试在 html 元素(如 div)中添加任何数据。还是不行
  • 但是尝试添加类似 ourData.coord 或 ourData.name 的内容,而不仅仅是 ourData,因为这样行得通
  • 没关系,我用不同的方法让它工作,重点是我让它工作
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
相关资源
最近更新 更多