【问题标题】:Get name of key in key/value pair in JSON using jQuery?使用jQuery获取JSON中键/值对中的键名?
【发布时间】:2011-04-06 20:45:24
【问题描述】:

假设我有这个 JSON:

[
    {
        "ID": "1",
        "title": "Title 1",
    },
    {
        "ID": "2",
        "title": "Title 2",
    }
]

如何返回每条记录重复出现的键名集?在这种情况下,ID, title

我试过了:

$.getJSON('testing.json', function(data) {
  var items = [];
  $.each(data, function(key, val) {
    items.push(key +', ');
  });

  $('<p/>', {
     html: items.join('')
  }).appendTo('#content');
});

没有成功。

这是一个 JSON“数据库”,每个“记录”都有相同的键。我只想要一个脚本来告诉我键是什么,而不是测试它们是否出现在每个条目中。

【问题讨论】:

  • 所以你有一个 json 对象数组。你只想要共享密钥吗?所以如果第一个有另一对 'key':'val' 但第二个没有,你不希望返回。正确吗?

标签: javascript jquery json


【解决方案1】:

这将为您提供一个包含与对象数组匹配的所有字符串属性的数组。这就是你要找的吗?

$.getJSON('testing.json', function(data) {
    var propertiesThatExistInAll = getPropertiesThatExistInAll(data);
});


var getPropertiesThatExistInAll = function(arr) {
    var properties = $.map(data[0], function (prop, value) {
        return prop;
    });

    var propertiesThatExistInAll = [];

    $.each(properties, function (index, property) {
        var keyExistsInAll = true;

        // skip the first one since we know it has all the properties
        for (var i = 1, len = data.length; i < len; i++) {
            if (!data[i].hasOwnProperty(property)) {
                keyExistsInAll = false;
                break;
            }
        }

        if (keyExistsInAll) {
            propertiesThatExistInAll.push(property);
        }
    });

    return propertiesThatExistInAll;
};

【讨论】:

    【解决方案2】:

    大概是这样的吧?

    items = [];
    for (key in jsonobj) {
        if (!itemExists(items, key)) {
            items[items.length] = key
        }
    }
    
    function itemExists(items, value) {
        for (i = 0; i < items.length; i++) {
            if (items[i] == value) {
                return true
            }
        }
        return false;
    }
    

    当然,这将返回存在于任何一个对象中的项目,而不是所有对象中存在的项目。从您的问题来看,这是否是您想要的解决方案并不完全清楚。

    【讨论】:

      【解决方案3】:

      这可能会更高效/简洁,但下面的函数会做到这一点。

      var testJson = [ {'oi' : 1, 'arf': 2, 'foo' : 0}, {'oi': 5, 'arf': 7}];
      
      function commonKeys(j)
      {
      
          var fillUp = [];
          for(var i in j[0])
             fillUp.push(i);
      
          for(var i = 1; i < j.length; i++)
          {
             var cur = j[i]; var curArr = [];
             for (var i in cur) {curArr.push(i)};
             fillUp = fillUp.filter(function(x) {return (curArr.indexOf(x) != -1);});
          }
      
          return fillUp;
      }
      
      alert(commonKeys(testJson)); //oi,arf (not foo)
      

      【讨论】:

        猜你喜欢
        • 2020-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 2020-07-14
        相关资源
        最近更新 更多