![](/img/trans.png)
[英]object Object returns/How do I target a specific object in a JSON api with jQuery
[英]How to target specific object in JSON file
这是下面的我的JSON文件。 数组中的每个对象都属于一个ID。 因此,第一个对象将是#one,第二个对象将是#two。 等等。 我不知道如何用JavaScript编写代码。 例如,如何定位对象[1]附加到对象[1]的哪个数组编号[1]? 我还需要删除对象的第一行是计数行吗? 谢谢!
以便获得更多细节。 给了我一个作业,我将图片放在html中,并在图片下方,json文件(图片的描述)中的每个对象都应该放在其下方。 我是json和ajax的新手:(所以id #one,#two ...只是示例。会有6个id。每个对象一个。
[
[
{
"count": "80",
"countTxt":"Buyer logins",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"523"
},
{
"count": "233",
"countTxt":"Searches",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"628"
},
{
"count": "533",
"countTxt":"Views of our member pages",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"2,365"
}
],
[
{
"count": "80",
"countTxt":"Total vists",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"412"
},
{
"count": "53",
"countTxt":"Unique visitors",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"731"
},
{
"count": "1:12 min",
"countTxt":"Total time spent on page",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"784.2 mins"
}
]
]
您有一个包含包含对象的数组的数组。 它们似乎在任何地方都没有这些ID,并且具有#one
, #two
等名称,因此分配这些ID #one
#two
(您基本上必须要等待一个名称列表)。
一旦有了该列表,工作本身就相对简单了:
通过JSON.parse
将JSON解析为对象图。
var outerArray = JSON.parse(jsonText);
创建一个空白对象,您可以将命名对象另存为as属性,例如地图:
var map = {};
输入您的ID列表作为数组:
// This assumes no more than 99 elements var ids = [ "#one", "#two", "#three", /*...and so on...*/, "#ninety-nine" ];
有一个以0
开头的索引变量。
遍历最外面的数组; 您有很多实现此目的的选项 ,我可能会使用forEach
:
outerArray.forEach(function(nestedArray) { // ...more code here });
在该循环内,循环遍历嵌套数组中的对象:
outerArray.forEach(function(nestedArray) { nestedArray.forEach(function(object) { // ...more code here }); });
在内部循环中,通过索引变量使用下一个可用ID将当前对象添加到地图中:
map[ids[index++]] = object;
如果确实要删除对象的count
属性,请执行以下操作:
delete object.count;
所以放在一起:
var index = 0;
var outerArray = JSON.parse(jsonText);
var map = {};
var ids = [ // This assumes no more than 99 elements
"#one", "#two", "#three", /*...and so on...*/, "#ninety-nine"
];
outerArray.forEach(function(nestedArray) {
nestedArray.forEach(function(object) {
map[ids[index++]] = object;
delete object.count; // Doesn't matter whether this is before or after the line above
});
});
笔记:
访问那些具有#one
类的ID的对象确实很尴尬,但是我想您有理由这么做。 您可以进行map["#one"]
等操作来获取对象。
如果你没有删除count
属性,不要打扰。
首先,您可能想问问自己,当前格式化数据的方式是否合适。 目前,您的数据格式如下:
var jsonObject =
[
[{},{},{}],
[{},{},{}]
];
在最外面的数组中,该数组包含两个数组,然后将json数据/ javascript对象存储在这些数组中。 可能不需要最外层的数组,这将简化在没有JSON对象的情况下访问数据的方式。 因此请记住,您在SO上获得的所有示例都将在您呈现JSON对象时引用它。
// List off all "countTxt" objects to demonstrate how to
// iterate over a json object that contains nested
// arrays containing data. In your example, you have two arrays
// that each contain json data.
for (var i in jsonObject) {
for (var j in jsonObject[i]){
console.log(jsonObject[i][j].countTxt);
}
}
上面的循环将打印出以下内容:
/*
Unique visitors
Total time spent on page
Buyer logins
Searches
Views of our member pages
Total vists
Unique visitors
Total time spent on page
*/
警告:正如TJ Crowder所指出的那样,使用for..in循环访问json数据会再次咬住您,因此在生产代码中不建议使用这种类型的for..in循环结构(上述),但它可以作为一个简单的演示,您如何使用访问符号[]
从数据对象数组中获取值。 要阅读一些最佳实践,您可以在此处阅读TJ Crowder关于该主题的深入文章。
如果要在jsonObject中定位特定项目,则需要这样做:
// Grab the second object in the data array:
var secondObjectInJsonData = jsonObject[1];
console.log(secondObjectInJsonData);
// secondObjectInJsonData -> [Object, Object, Object]
如果要获取数据数组中的特定数据:
// Grab the second object, inside the first array of json data
var countTxtOfSecondObject = jsonObject[0][2].countTxt;
console.log(countTxtOfSecondObject);
// countTxtOfSecondObject --> "Views of our member pages"
要删除对象,可以使用delete
命令
var someObject = jsonObject[1][2];
delete someObject.count;
console.log("someObject after 'count' has been deleted: ", someObject);
这是一个JSFiddle,可以看到所有正在使用的代码 。 只需在Chrome开发人员工具(在Chrome浏览器中)中打开控制台,即可查看所有console.log()语句的输出。
首先,您应该重新格式化数据,尝试使用JSON Editor Online ,这将显示数据的树状视图。 可以使用Chrome扩展程序,请检查Chrome网上应用店。 这是一个非常好的做法。
我已经将您的数据重新格式化,并使其变得更易读。 看一看;
[
{
"count": "80",
"countTxt":"Buyer logins",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"523"
},
{
"count": "233",
"countTxt":"Searches",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"628"
},
{
"count": "533",
"countTxt":"Views of our member pages",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"2,365"
},
{
"count": "80",
"countTxt":"Total vists",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"412"
},
{
"count": "53",
"countTxt":"Unique visitors",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"731"
},
{
"count": "1:12 min",
"countTxt":"Total time spent on page",
"participantsTxt":"Total for all participating member companies:",
"participantCount":"784.2 mins"
}
]
您可以使用
jQuery.getJSON()
方法访问JSON数据,并使用jQuery.each
方法遍历对象。 试试看
$.getJSON('data.json', function(data) {
$.each(data, function(k) {
console.log(data[k]);
});
});
检查控制台(ctrl + shift + j)。
console.log('Count: ' + data[k]['count']);
//显示所有计数。 希望您有一些想法,您可以像这样处理JSON对象,如果我错了,请纠正我。 谢谢
您可以访问以下属性
json[0][0]["count"]
如果要删除属性,请使用
delete json[0][0]["count"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.