过滤JSON对象并获取第二个数组作为结果

时间:2016-03-14 21:44:58

标签: javascript json getjson

有一个JSON对象,它的结构如图所示。我怎么能用名为"State"的键过滤这个对象,结果得到第二个数组?

要说清楚,我需要一个与此MySQL代码相同的已翻译代码:SELECT * FROM data.sepah WHERE state = 'sth'

有谁可以帮我解决这个问题?

enter image description here

我的完整JSON文件是这样的:

{

"sepah": [

    {  
        "row"   : "1",     
        "city"    : "newYork",
        "yegan" : "california",
        "raste" : "tese",
        "clinic" : "+",
        "degree" :  "1",
        "notation" : "empty",
        "kind"  :   "airforce",
        "state" :   "azerbaijan-east"


    },
    {  
        "row"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    },
    {  
        "row"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    },
    {  
        "row"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    }

],

"naja": [

    {  
        "id"   : "1",     
        "city"    : "ارتش هرمزگان",
        "far_entz_ostan"    : "۸۲ امام حسین",
        "far_entz_shahr"    : "پدافندی",
        "far_marzbani" : "دارد",
        "hang_marzi" :  "۱",
        "yegan_vije" : "دو مرکز درمانی",
        "clinic"    : "ارتش",
        "hospital"  :   "نیروی هوایی",
        "markaz_amoozeshi"  :   "خراسان رضوی",
        "kind"  :   "نیروی هوایی",          
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "ارتش هرمزگان",
        "far_entz_ostan"    : "۸۲ امام حسین",
        "far_entz_shahr"    : "پدافندی",
        "far_marzbani" : "دارد",
        "hang_marzi" :  "۱",
        "yegan_vije" : "دو مرکز درمانی",
        "clinic"    : "ارتش",
        "hospital"  :   "نیروی هوایی",
        "markaz_amoozeshi"  :   "خراسان رضوی",
        "state" :   "azerbaijan-east"

    },
    {  
        "id"   : "1",     
        "city"    : "ارتش هرمزگان",
        "far_entz_ostan"    : "۸۲ امام حسین",
        "far_entz_shahr"    : "پدافندی",
        "far_marzbani" : "دارد",
        "hang_marzi" :  "۱",
        "yegan_vije" : "دو مرکز درمانی",
        "clinic"    : "ارتش",
        "hospital"  :   "نیروی هوایی",
        "markaz_amoozeshi"  :   "خراسان رضوی",
        "kind"  :   "نیروی هوایی",          
        "state" :   "azerbaijan-east"

    },
    {  
        "id"   : "1",     
        "city"    : "ارتش هرمزگان",
        "far_entz_ostan"    : "۸۲ امام حسین",
        "far_entz_shahr"    : "پدافندی",
        "far_marzbani" : "دارد",
        "hang_marzi" :  "۱",
        "yegan_vije" : "دو مرکز درمانی",
        "clinic"    : "ارتش",
        "hospital"  :   "نیروی هوایی",
        "markaz_amoozeshi"  :   "خراسان رضوی",
        "kind"  :   "نیروی هوایی",          
        "state" :   "azerbaijan-east"


    }

],

"aja": [

    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "yegan" : "۸۲ امام حسین",
        "raste" : "پدافندی",
        "clinic" : "دارد",
        "degree" :  "۱",
        "notation" : "دو مرکز درمانی",
        "kind"  :   "نیروی هوایی",
        "state" :   "azerbaijan-east"


    }

],

"setad_kol_sepah": [

    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "sepah_ostani"  : "۸۲ امام حسین",
        "nahiye_moghavemat" : "پدافندی",
        "tip_mardom_paye" : "دارد",
        "darmangah" :   "۱",
        "daraje" : "دو مرکز درمانی",
        "markaz_amoozeshi"  : "ارتش",
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "sepah_ostani"  : "۸۲ امام حسین",
        "nahiye_moghavemat" : "پدافندی",
        "tip_mardom_paye" : "دارد",
        "darmangah" :   "۱",
        "daraje" : "دو مرکز درمانی",
        "markaz_amoozeshi"  : "ارتش",
        "state" :   "azerbaijan-east"

    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "sepah_ostani"  : "۸۲ امام حسین",
        "nahiye_moghavemat" : "پدافندی",
        "tip_mardom_paye" : "دارد",
        "darmangah" :   "۱",
        "daraje" : "دو مرکز درمانی",
        "markaz_amoozeshi"  : "ارتش",
        "state" :   "azerbaijan-east"


    },
    {  
        "id"   : "1",     
        "city"    : "اصفهان",
        "sepah_ostani"  : "۸۲ امام حسین",
        "nahiye_moghavemat" : "پدافندی",
        "tip_mardom_paye" : "دارد",
        "darmangah" :   "۱",
        "daraje" : "دو مرکز درمانی",
        "markaz_amoozeshi"  : "ارتش",
        "state" :   "azerbaijan-east"


    }

]    

}

3 个答案:

答案 0 :(得分:1)

如果您希望过滤以仅匹配某些特定的状态"价值,你应该这样做:

var newArr = obj.sepah.filter(function (i) {
  return i.state === 'sth';
});

答案 1 :(得分:0)

您可以执行map

const newArray = theArray.map(item => item.state);

或者,在Safari和所有那些尚不支持ES6的浏览器中,

var newArray = theArray.map(function (item) {
  return item.state;
});

这将返回一个只包含字符串的数组,每个字符串取自输入数组的每个项目的state属性。

答案 2 :(得分:0)

您可以使用Array#filter

result = data.sepah.filter(function (a) {
    return a.state === 'somevalue';
});

工作示例:



var data = { "sepah": [{ "row": "1", "city": "newYork", "yegan": "california", "raste": "tese", "clinic": "+", "degree": "1", "notation": "empty", "kind": "airforce", "state": "azerbaijan-east" }, { "row": "2", "city": "??????", "yegan": "?? ???? ????", "raste": "???????", "clinic": "????", "degree": "?", "notation": "?? ???? ??????", "kind": "????? ?????", "state": "azerbaijan-west" }, ], "naja": [], "setad_kol_sepah": [] },
    result = data.sepah.filter(function (a) {
        return a.state === 'azerbaijan-east';
    });

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

具有单独的功能:

&#13;
&#13;
function filter(array, key, search) {
    return array.filter(function (a) {
        return a[key] === search;
    });
}

var data = { "sepah": [{ "row": "1", "city": "newYork", "yegan": "california", "raste": "tese", "clinic": "+", "degree": "1", "notation": "empty", "kind": "airforce", "state": "azerbaijan-east" }, { "row": "2", "city": "??????", "yegan": "?? ???? ????", "raste": "???????", "clinic": "????", "degree": "?", "notation": "?? ???? ??????", "kind": "????? ?????", "state": "azerbaijan-west" }, ], "naja": [], "setad_kol_sepah": [] },
    result = filter(data.sepah, 'state', 'azerbaijan-east');

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

有多个值:

&#13;
&#13;
function filter(array, key, searchArray) {
    return array.filter(function (a) {
        return ~searchArray.indexOf(a[key]);
    });
}

var data = { "sepah": [{ "row": "1", "city": "newYork", "yegan": "california", "raste": "tese", "clinic": "+", "degree": "1", "notation": "empty", "kind": "airforce", "state": "azerbaijan-east" }, { "row": "2", "city": "??????", "yegan": "?? ???? ????", "raste": "???????", "clinic": "????", "degree": "?", "notation": "?? ???? ??????", "kind": "????? ?????", "state": "azerbaijan-west" }, ], "naja": [], "setad_kol_sepah": [] },
    result = filter(data.sepah, 'state', ['azerbaijan-east', 'azerbaijan-west']);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;