【问题标题】:How to select json value [closed]如何选择json值[关闭]
【发布时间】:2014-09-11 18:54:34
【问题描述】:

json

 var employees ='{"skills":[{"category":"JavaScript","tests":[{"name":"One","score":90}, {"name":"Two","score":96}]},{"category":"CouchDB","tests":[{"name":"One","score":79},"name":"Two","score":84}]}]}';

jquery

 var obj = jQuery.parseJSON(employees);
 for(i=0; i<obj.skills[0].tests[0].length; i++)
 {
  alert(obj.skills.tests.name[i]);
  }

嗨,我需要在警报中,我希望输出是 “一个90 两个 96" 我希望第一个测试值在 ul li 中发出警报或打印。任何人帮助我。

【问题讨论】:

  • alert(obj.skills[0].tests[0].name[i]); 错过了[0]
  • @Satpal 不,它不工作
  • 首先是您的 JSON 无效。你需要用{"skills":[{"category":"JavaScript","tests":[{"name":"One","score":90}, {"name":"Two","score":96}]},{"category":"CouchDB","tests":[{"name":"One","score":79},{"name":"Two","score":84}]}]}更新它
  • guys json 很大,它的工作 gud 签入jsonviewer.stack.hu 我对 forloop 有疑问并提醒请更正它...我检查了你的代码,但它不工作

标签: javascript jquery json html


【解决方案1】:

根据 Satpal 的上述评论,您错过了循环中的 [0],因此您无法提醒数据。所以像下面这样使用

var obj = jQuery.parseJSON(employees);
var test;
for(var i=0;i<obj.skills[0].tests.length;i++){
test = obj.skills[0].tests[i];
alert(test.name+' '+test.score);

}

希望这会有所帮助...

【讨论】:

  • 更新 Satpal 请审查
  • 为什么要投反对票?你能解释一下我会纠正吗
  • OP 发布了无效的 JSON。但我没有对你投反对票
  • 反对票的不是我,而是test.name 是一个字符串,name[0] 将返回第一个字符。 itests[0].length 进行比较,但用于 tests[0].name。您的代码将返回意外结果。
  • @Sudharsan OP 说 json 是有效的
【解决方案2】:

您的测试对象不是一个列表,而是有两个属性namescore

var obj = jQuery.parseJSON(employees);
var test0 = obj.skills[0].tests[0];
alert(test0.name+' '+test0.score);

在所有技能测试中显示:

var obj = jQuery.parseJSON(employees);
var testi;
for(var i=0;i<obj.skills[0].tests.length;i++){
    testi = obj.skills[0].tests[i];
    alert(testi.name+' '+testi.score);
}

【讨论】:

    【解决方案3】:

    在 jquery 中使用 .each

     var employees = {
        "skills": [{
            "category": "JavaScript",
                "tests": [{
                "name": "One",
                    "score": 90
            }, {
                "name": "Two",
                    "score": 96
            }]
    
        }]
    };
    
    $.each(employees.skills, function (key, val) {
    
        for (var i in val.tests) {
    
            alert(val.tests[i].name);
            alert(val.tests[0].score);
        }
    });
    

    【讨论】:

      【解决方案4】:

      最好在 lodash 中使用 _.forEach 来简化操作,但是如果您想使用本机 javascript,请在​​下面找到。 另请注意,您在

      之前错过了一个左大括号,即“{”

      { //这里没有
      "名称":"二",
      “得分”:84 }

      解决方案

       var obj = JSON.parse(employees);    
       for(i=0; i<obj.skills.length; i++)
       {
          var temp = obj.skills[i];
          for(j=0;j<temp.tests.lengh;j++)
          {
              var outputObj = temp.tests[j];
              alert(outputObj.name+" "+outputObj.score);
          }
      
       }
      

      如果您不想输出所有技能,请移除外部 forloop,即

      var obj = JSON.parse(employees);        
      
      for(j=0;j<obj.skills[0].tests.lengh;j++)
      {
          var outputObj = temp.tests[j];
          alert(outputObj.name+" "+outputObj.score);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多