如何选择json值[关闭]

Posted

技术标签:

【中文标题】如何选择json值[关闭]【英文标题】:How to select json value [closed] 【发布时间】: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 有疑问并提醒请更正它...我检查了你的代码,但它不工作 【参考方案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);

【讨论】:

以上是关于如何选择json值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从JSON重新选择值

如何在 mysql 中从 JSON 中选择值

如何在一个值的数量大于另一个值的 postgresql 行中进行选择? [关闭]

我如何在本机反应中从 json 中选择特定值?

如何从json文件中选择和打印值

如何在页面加载时在 HTML 选择选项中选择 JSON 结果