如何选择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] 将返回第一个字符。 i
与 tests[0].length
进行比较,但用于 tests[0].name
。您的代码将返回意外结果。
@Sudharsan OP 说 json 是有效的【参考方案2】:
您的测试对象不是一个列表,而是有两个属性name
和score
:
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值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章