Как найти значение в json

Как правильно указать имя состояния, используя почтовый индекс в приведенных ниже json-данных;

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

Как найти state на postcode;

если я ищу почтовый индекс 2600, если получить результат, например VIC

Ответ 1

Удалите '', так как ваш не является допустимой строкой, удалите '', чтобы сделать его допустимым литералом объекта, затем вы можете перебирать ключи объекта и проверять, имеет ли он соответствующий 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));

Ответ 2

Попробуйте это

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

Ответ 3

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)

Ответ 4

Хорошо, теперь.. Вы просто просите нас помочь вам с домашним заданием:) Хорошо, что в хорошем настроении.

Сначала введите правильную строку 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;
}

Ответ 5

Вы можете попробовать что-то вроде этого:

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);
})()