繁体   English   中英

如何在JSON文件中定位特定对象

[英]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 (您基本上必须要等待一个名称列表)。

一旦有了该列表,工作本身就相对简单了:

  1. 通过JSON.parse将JSON解析为对象图。

     var outerArray = JSON.parse(jsonText); 
  2. 创建一个空白对象,您可以将命名对象另存为as属性,例如地图:

     var map = {}; 
  3. 输入您的ID列表作为数组:

     // This assumes no more than 99 elements var ids = [ "#one", "#two", "#three", /*...and so on...*/, "#ninety-nine" ]; 
  4. 有一个以0开头的索引变量。

  5. 遍历最外面的数组; 您有很多实现此目的的选项 ,我可能会使用forEach

     outerArray.forEach(function(nestedArray) { // ...more code here }); 
  6. 在该循环内,循环遍历嵌套数组中的对象:

     outerArray.forEach(function(nestedArray) { nestedArray.forEach(function(object) { // ...more code here }); }); 
  7. 在内部循环中,通过索引变量使用下一个可用ID将当前对象添加到地图中:

     map[ids[index++]] = object; 
  8. 如果确实要删除对象的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)。 在此处输入图片说明

  1. 现在,您可以轻松访问该字符串。 例如 console.log('Count: ' + data[k]['count']); //显示所有计数。

希望您有一些想法,您可以像这样处理JSON对象,如果我错了,请纠正我。 谢谢

您可以访问以下属性

json[0][0]["count"]

如果要删除属性,请使用

delete json[0][0]["count"]

小提琴http://jsfiddle.net/wa99rxgL/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM