如何在json中找到价值

时间:2015-12-24 10:01:14

标签: javascript json

如何使用bellow json数据中的邮政编码来精确州名;

var data = '{
  "1": {
    "state": "VIC",
    "postcode": "2600,2603,2605,2606"
  },
  "2": {
    "state": "NSW",
    "postcode": "2259,2264"
  }
}'

如何通过state找到postcode;

如果我搜索邮政编码2600,则会获得VIC

之类的结果

5 个答案:

答案 0 :(得分:9)

删除'',因为你的字符串不是有效字符串,删除''使其成为有效的对象字面值,然后你可以迭代对象的键并检查它是否具有匹配的POSTCODE和如果它已经返回它的相应状态。

var data = {
  "1": {
    "state": "VIC",
    "postcode": "2600,2603,2605,2606"
  },
  "2": {
    "state": "NSW",
    "postcode": "2259,2264"
  }
};

function getState(data, postcode){

  for(var x in data){
    if(data[x].postcode && data[x].postcode.split(",").indexOf(postcode.toString())!=-1) return data[x].state;
  }
  
  return "Not Found";
  
}

alert(getState(data, "2600"));
alert(getState(data, 2264));

即使不使用.indexOf,您也可以直接对邮政编码.split(",")进行操作。但是,它也会与2600匹配,但不应该是这种情况。因此,请使用split

使用json[x].postcode条件确保对象中存在邮政编码字段。否则,如果它不存在,它将给出错误。

答案 1 :(得分:7)

试试这个

var data = '{"1": { "state": "VIC","postcode": "2600,2603,2605,2606"}, "2": {"state": "NSW","postcode": "2259,2264"}}';
var jsObj = JSON.parse(data);
var find = "2600";

var values = Object.keys(jsObj).filter(function(x) {
  return jsObj[x].postcode.indexOf(find) > -1;
}).map(function(x) {
  return jsObj[x].state;
});

console.log(values.length > 0 ? values[0] : "not found");

JSFIDDLE

答案 2 :(得分:5)

function findState(data, postcode) {
  var postcode = postcode.toString()
  for (var k in data) {
    var postcodes = data[k].postcode.split(",")
    if (postcodes.indexOf(postcode) != -1)
      return data[k].state
  }
}

// Demo Output
var data = '{"1":{"state":"VIC","postcode":"2600,2603,2605,2606"},"2":{"state":"NSW","postcode":"2259,2264"}}'
var dataObj = JSON.parse(data)

var state = findState(dataObj, 2600)
document.write(state)

答案 3 :(得分:1)

现在好了..你只是要求我们帮你做作业:)好心情好心情。

首先获取正确的JSON字符串,然后使用JSON.parse将其解析为对象。然后迭代这个对象并拆分邮政编码字符串并找到状态!

var data = ......
var resp = JSON.parse(data);

function getStateByPostcode(postcode) {
  var state = "";
  for(var i in resp) {
    if(resp.hasOwnProperty(i)) {
       var postcodes = resp[i]['postcode'].split(',');
       if(postcodes.indexOf(postcode) !== -1) {
           return resp[i]['state'];
       }
    }
  }
  return state;
}

答案 4 :(得分:1)

您可以尝试这样的事情:

function searchInObject(object, searchKey, searchValue) {
  for (var i in object) {
    if (object[i][searchKey].indexOf(searchValue) > -1) {
      return object[i];
    }
  }
}

(function() {
  var data = {
    "1": {
      "state": "VIC",
      "postcode": "2600,2603,2605,2606"
    },
    "2": {
      "state": "NSW",
      "postcode": "2259,2264"
    }
  }

  var pin = "2600";
  var result = searchInObject(data, "postcode", pin);
  console.log(result.state);

  pin = "2259";
  result = searchInObject(data, "postcode", pin);
  console.log(result.state);
})()