【问题标题】:Can't get JSON properties to display via jQuery无法通过 jQuery 显示 JSON 属性
【发布时间】:2014-01-03 17:22:22
【问题描述】:

由于某种原因,我似乎无法显示此 JSON 字符串的属性: http://www.easports.com/iframe/fifa14proclubs/api/platforms/PS4/clubs/51694/members

在过去的 2-3 个小时里,我一直在这里尝试不同的方法来选择单个属性,例如数组中第一个人的名字。我尝试过的几个选择器:

$("#output").append(data.raw[0].176932931.name);
$("#output").append(data.raw[0][0].name);

我总是遇到同样的错误。 “data.raw[0] 未定义”。 JSON 字符串有效,我可以使用以下命令将整个字符串输出到我的页面:

document.getElementById('output').innerHTML=data.toSource();

将其解析为 JSON 对象会给我另一个错误,因为它已经是 JSON 对象。通过使用 console.log(data) 我可以在 Firebug 中正确查看 JSON 对象。

data 是从我的 YQL 语句返回的 Javascript JSON 对象变量的名称。

如果有人可以提供一些示例来说明我应该如何访问上述 JSON 字符串的属性,那就太好了。

更新:

这是我的 YQL 语句中的回调函数:

function cbfunc(json)
{ 
   if (json.query.count)
   { 
      var data = json.query.results.json;
      $("#output").append(data.raw[0]["176932931"].name);
   } 

【问题讨论】:

  • 你试过 console.log 对象吗?
  • 是的,它显示正确。我能够浏览每个对象并查看它们的属性。
  • 你的 json 工作检查这个小提琴:jsfiddle.net/q8xL3
  • 检查我在主帖中的编辑,我发布了我的“数据”变量被分配的回调函数。
  • 那么现在的问题是什么?

标签: javascript jquery json object yql


【解决方案1】:

您需要使用bracket notation,因为以数字开头的标识符无效

$("#output").append(data.raw[0]["176932931"].name);

【讨论】:

  • 试过了,它仍然给我“data.raw [0]未定义”。不知道为什么。 ://
  • 他说虽然错误是 raw[0] 是未定义的,因此 ["176932931"] 也将是未定义的
  • @samer.j92,看看它的工作原理jsfiddle.net/q8Tqu我使用了来自你的 URL 的数据
  • 检查我在主帖中的编辑,我发布了我的“数据”变量被分配的回调函数。
【解决方案2】:

因为"176932931" 是一个整数键,所以您必须像json["176932931"] 一样访问。

例如

data.raw[0]["176932931"].name

见小提琴here

【讨论】:

    【解决方案3】:

    .count 不是 json 对象的属性。试试这个:

    var something = {"raw":[{"176932931":{"name":"Shipdawg","blazeId":176932931,"clubStatus":0,"onlineStatus":0,"nucleusId":2266699357,"personaName":"Shipdawg"},"182141183":{"name":"Beks8","blazeId":182141183,"clubStatus":0,"onlineStatus":0,"nucleusId":2272736228,"personaName":"Beks8"},"219929617":{"name":"ChelseaFC_26","blazeId":219929617,"clubStatus":0,"onlineStatus":0,"nucleusId":2304510098,"personaName":"ChelseaFC_26"},"457588267":{"name":"Lazy__Rich","blazeId":457588267,"clubStatus":0,"onlineStatus":0,"nucleusId":2495578386,"personaName":"Lazy__Rich"},"517570695":{"name":"x0__andrew__0x","blazeId":517570695,"clubStatus":0,"onlineStatus":1,"nucleusId":2549150176,"personaName":"x0__andrew__0x"},"912396727":{"name":"mizz00-","blazeId":912396727,"clubStatus":0,"onlineStatus":1,"nucleusId":1000118566560,"personaName":"mizz00-"},"915144354":{"name":"MisterKanii","blazeId":915144354,"clubStatus":2,"onlineStatus":0,"nucleusId":2281969661,"personaName":"MisterKanii"}}]}
    
    
    function cbfunc(json)
    { 
       if (json.raw.length)
       { 
          $("#output").append(json.raw["0"]["176932931"].name);
       }
    }
    
    cbfunc(something);
    

    【讨论】:

      【解决方案4】:

      告诉我这是否适合你:

      function cbfunc(json)
      {
      
          $each(json, function(key, object){
               console.log(key, object);
          });
          var raw = query.results.json.raw;
          console.log(raw );
      
      
          // uncomment it if you want some extra check.
          if (/*typeof data.raw !=='undefined' && */data.raw.length > 0)
          { 
              //console.log(data.raw[0]["176932931"].name);
              //$("#output").append(data.raw[0]["176932931"].name);
          }
      }
      

      如果这对您有用,则无需将对象引用到数据,只需使用对象的自身即可。

      JS 小提琴:http://jsfiddle.net/q8xL3/2/

      【讨论】:

      • 这似乎没有任何作用。没有给我任何错误,页面上也没有显示任何内容。
      • 修复它再次检查解决方案
      • 这给了我和以前一样的错误:TypeError: data.raw is undefined
      • 删除所有console.logs,并在控制台记录我在回答中所做的事情并将其发送到这里
      • 告诉我你从上面得到了什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多