如何在JavaScript或jQuery中过滤JSON数据?

如何在JavaScript或jQuery中过滤JSON数据?,javascript,jquery,json,Javascript,Jquery,Json,如何使用Javascript或jQuery过滤JSON数据 这是我的JSON数据: [{"name":"Lenovo Thinkpad 41A4298","website":"google"}, {"name":"Lenovo Thinkpad 41A2222","website":"google"}, {"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"}, {"name":"Lenovo Thinkpad 41A424448","websi

如何使用Javascript或jQuery过滤JSON数据

这是我的JSON数据:

[{"name":"Lenovo Thinkpad 41A4298","website":"google"},
{"name":"Lenovo Thinkpad 41A2222","website":"google"},
{"name":"Lenovo Thinkpad 41Awww33","website":"yahoo"},
{"name":"Lenovo Thinkpad 41A424448","website":"google"},
{"name":"Lenovo Thinkpad 41A429rr8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ff8","website":"ebay"},
{"name":"Lenovo Thinkpad 41A429ss8","website":"rediff"},
{"name":"Lenovo Thinkpad 41A429sg8","website":"yahoo"}]
JavaScript:

obj1 = JSON.parse(jsondata);

现在我只想要包含网站的名称和网站数据等于“yahoo”

这就是你应该做的:(对于google find)

更好的解决方案:(萨尔曼的)


不需要jQuery,除非您针对的是旧浏览器,并且不想使用它

var yahooOnly = JSON.parse(jsondata).filter(function (entry) {
    return entry.website === 'yahoo';
});
2015年欧洲标准:

const yahooOnly = JSON.parse(jsondata).filter(({website}) => website === 'yahoo');

您可以使用jQuery查询每个函数,如下所述:

定义您的数据:

var jsonStr = '[{"name":"Lenovo Thinkpad 41A4298,"website":"google"},{"name":"Lenovo Thinkpad 41A2222,"website":"google"},{"name":"Lenovo Thinkpad 41Awww33,"website":"yahoo"},{"name":"Lenovo Thinkpad 41A424448,"website":"google"},{"name":"Lenovo Thinkpad 41A429rr8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ff8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ss8,"website":"rediff"},{"name":"Lenovo Thinkpad 41A429sg8,"website":"yahoo"}]';
var json = JSON.parse(jsonStr);
$.each(JSON.parse(json), function (idx, obj) {
    if (obj.website == 'yahoo') {
        // do whatever you want
    }
});
将JSON字符串解析为JSON对象:

var jsonStr = '[{"name":"Lenovo Thinkpad 41A4298,"website":"google"},{"name":"Lenovo Thinkpad 41A2222,"website":"google"},{"name":"Lenovo Thinkpad 41Awww33,"website":"yahoo"},{"name":"Lenovo Thinkpad 41A424448,"website":"google"},{"name":"Lenovo Thinkpad 41A429rr8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ff8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ss8,"website":"rediff"},{"name":"Lenovo Thinkpad 41A429sg8,"website":"yahoo"}]';
var json = JSON.parse(jsonStr);
$.each(JSON.parse(json), function (idx, obj) {
    if (obj.website == 'yahoo') {
        // do whatever you want
    }
});
迭代和筛选:

var jsonStr = '[{"name":"Lenovo Thinkpad 41A4298,"website":"google"},{"name":"Lenovo Thinkpad 41A2222,"website":"google"},{"name":"Lenovo Thinkpad 41Awww33,"website":"yahoo"},{"name":"Lenovo Thinkpad 41A424448,"website":"google"},{"name":"Lenovo Thinkpad 41A429rr8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ff8,"website":"ebay"},{"name":"Lenovo Thinkpad 41A429ss8,"website":"rediff"},{"name":"Lenovo Thinkpad 41A429sg8,"website":"yahoo"}]';
var json = JSON.parse(jsonStr);
$.each(JSON.parse(json), function (idx, obj) {
    if (obj.website == 'yahoo') {
        // do whatever you want
    }
});

尝试这种方式,甚至可以通过其他键进行过滤

数据:

用法:

//We do that to ensure to get a correct JSON
var my_json = JSON.stringify(my_data)
//We can use {'name': 'Lenovo Thinkpad 41A429ff8'} as criteria too
var filtered_json = find_in_object(JSON.parse(my_json), {website: 'yahoo'});
过滤函数

function find_in_object(my_object, my_criteria){

  return my_object.filter(function(obj) {
    return Object.keys(my_criteria).every(function(c) {
      return obj[c] == my_criteria[c];
    });
  });

}

我知道这个问题明确地说是JS或jQuery,但无论如何使用 lodash我想对其他搜索者来说总是很重要的

来源:

因此,原始问题的解决方案只有一行:

var result = _.filter(data, ['website', 'yahoo']);

它遍历json对象,搜索您关心的每个值,“网站”,如果它等于“yahoo”,那么您可以返回该值或在那里执行任何您喜欢的操作。现在它只是将该元素记录到控制台

jsonObj.forEach(function (element, index) {
    if(element['website'] === 'yahoo'){
        console.log('found', element)   
    }
})

在解析过程中可以检索这些值:

var yahoo=[],j=`[{“名称”:“联想Thinkpad 41A4298”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41A2222”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41Awww33”,“网站”:“雅虎”},
{“名称”:“联想Thinkpad 41A424448”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41A429rr8”,“网站”:“易趣”},
{“名称”:“联想Thinkpad 41A429ff8”,“网站”:“易趣”},
{“名称”:“联想Thinkpad 41A429ss8”,“网站”:“rediff”},
{“名称”:“联想Thinkpad 41A429sg8”,“网站”:“雅虎”}]`
var data=JSON.parse(j,函数(键,值){
如果(value.website==“yahoo”)yahoo.push(value);
返回值;})

console.log(yahoo)
以下代码适合我:

var data=[{“名称”:“联想Thinkpad 41A4298”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41A2222”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41Awww33”,“网站”:“雅虎”},
{“名称”:“联想Thinkpad 41A424448”,“网站”:“谷歌”},
{“名称”:“联想Thinkpad 41A429rr8”,“网站”:“易趣”},
{“名称”:“联想Thinkpad 41A429ff8”,“网站”:“易趣”},
{“名称”:“联想Thinkpad 41A429ss8”,“网站”:“rediff”},
{“名称”:“联想Thinkpad 41A429sg8”,“网站”:“雅虎”}]
var data_filter=data.filter(element=>element.website==“yahoo”)

console.log(数据过滤器)
@RoyiNamir立即检查……非常简单。使用。@SalmanA我对GREP一无所知。你能告诉我如何在上面的例子中使用GREP吗?filter没有得到广泛的支持(如你所说)@RoyiNamir请阅读我答案的开头。顺便说一下:那好吧。(我不是落选者:-)还有,为什么要链接?我已经知道,它在旧版Ie中没有得到广泛支持。我会争辩说,事实上,它得到了广泛支持(旧版Ie在XP上运行,但无论如何都会停止)。因此有了联系。此外,包含一个垫片要比包含整个jQuery好得多。他从来没有说过他已经在页面上有jQuery了。问题是JavaScript或jQuery。而且jQuery本身是冗余的。从
返回值。每个
都不起作用(可以返回false来终止循环,但仅此而已)。@RoyiNamir var as=$(temp.filter(函数(i,n){return n.website=='Google'});警报(as)@是的。没错。假设json是一个对象。(不是它的字符串表示形式)。@RoyiNamir HI。。。。。可能会得到两个网站列表,如:return n.website==='Google'| | n.website==='Yahoo'@Me7888您是在问还是在说?做得好,如果我想在这行中通过两个或更多的过滤器会怎么样:“var filtered_json=find_in_object(json.parse(my_json),{website:'Yahoo');”这段代码不按“Yahoo”过滤数据。它把它们全部改成了“雅虎”。问题是如何在网站等同于“雅虎”的情况下获取数据。@probitaille感谢您的提醒。我修正了代码,现在一切正常。谢谢你的更正。