【问题标题】:Filtering JSON response过滤 JSON 响应
【发布时间】:2017-04-28 01:07:44
【问题描述】:

我收到了来自 xhr 的回复,如下所示:

{
    "9994921432": {
        "name": "name 1",
        "ownerid": "543624"
    },
    "9979509360": {
        "name": "some name",
        "ownerid": "765875"
    },
    "9979524523": {
        "name": "some other name",
        "ownerid": "215654"
    },
    "9979524523": {
        "name": "some name",
        "ownerid": "65893"
    }
}

我试图根据“名称”的值过滤它,如果可能的话,使用“单线”(我不能使用 jQuery)。我正在测试这样的东西:

var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524523": { "name": "some other name", "ownerid": "65893" } }';
var json = JSON.parse( '[' + response + ']' );
var filtered = json.filter( function ( item ) { return item.name == 'some name' } );
console.log( filtered );

但是filtered 是空的。

我怎样才能得到像json 这样的对象,但只包含name == "some name" 的对象?

【问题讨论】:

    标签: jquery arrays json object filter


    【解决方案1】:

    尝试如下。您必须遍历对象而不是数组。

    var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "9979524524": { "name": "some other name", "ownerid": "65893" } }';
    var json = [];
    var resObj = JSON.parse(response);
    for(var key in resObj) {
      if(resObj[key].name == 'some name') {
        json.push(resObj[key]);
      }
    }
    
    console.log(json);

    【讨论】:

      【解决方案2】:

      用这段代码解决了:

      var response = '{ "9994921432": { "name": "the name", "ownerid": "543624" }, "9979509360": { "name": "some name", "ownerid": "765875" }, "9979524523": { "name": "some name", "ownerid": "215654" }, "45756745675": { "name": "some name", "ownerid": "65893" } }';
      
      var json = JSON.parse( response );
      var filtered = {};
      
      Object.keys( json ).forEach( function( key ) {
          if( json[key].name == "some name" ) {
              filtered[key] = json[key];
          }
      });
      
      console.log( filtered );
      

      不是我想要的单线,但能胜任。

      【讨论】:

      • 您的 json 数据包含两个相同的不同值的键,这就是结果丢失一个项目的原因。
      • 哦,哈哈,我没看到,谢谢指出。复制粘贴以创建测试代码时搞砸了。
      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2021-03-10
      • 2019-08-02
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多